在Objective-C中,NSLog相当于C语言中的printf,常用于文字输出。...1.NSLog定义 NSLog定义在NSObjCRuntime.h中,如下所示: void NSLog(NSString *format, …); 基本上,NSLog很像printf,同样会在console...2.示例 NSLog可以如下面的方法使用: NSLog (@"this is a test"); NSLog (@"string is :%@", string); NSLog (@"x=%d, y=%...d", 10, 20); 但是下面的写法是不行的: int i = 12345; NSLog( @"%@", i ); 原因是, %@需要显示对象,而int i明显不是一个对象,要想正确显示,要写成:...int i = 12345; NSLog( @"%d", i ); 3.格式 NSLog的格式如下所示: %@ 对象 %d, %i 整数 %u,%z 无符整形 %f 浮点/双字 %x, %X 二进制整数
NSLog在输出的时候,可以使用很多C中的格式符号,与print一样。...u000a```%c\u000a``` 8-bit unsigned character (\u000a```unsigned char\u000a```), printed by \u000a```NSLog...digit \u000a```%C\u000a``` 16-bit Unicode character (\u000a```unichar\u000a```), printed by \u000a```NSLog
一、OSLog与NSLog的区别 NSLog: NSLog的文档,第一句话就说:Logs an error message to the Apple System Log facility....,所以首先,NSLog就不是设计作为普通的debug log的,而是error log;其次,NSLog也并非是printf的简单封装,而是Apple System Log(ASL)的封装。...NSLog效率低的原因是NSLog做了两件事: 1.-它将日志消息写入Apple System Logging (asl)设施。这允许日志消息显示在Console.app中。 2....{ NSLog("nslog---%d", i) } } let endNSLog...跟NSLog的输出方式一致。当然,经过处理之后,性能会比直接使用NSLog要好。 而我们常用的NSLog会将日志写入到控制台.app和Xcode控制台。
1.2 发布模式关闭NSLog //调试模式 #ifdef DEBUG #define NSLog(...)...NSLog(__VA_ARGS__) #define KisDebug 1 //#define NSLog(fmt, ...)...; #else//发布模式 #define NSLog(...)...#define KisDebug 0 #endif II NSLog调试技巧 2.1 Where to find NSLog's output NSLog outputs messages to the...) //A better version of NSLog #define NSLog(format, ...) do { \ fprintf(stderr, " %s\n", \ [
在开发过程中,在调试过程中经常打印不出自己想要的数据格式,还时常报警告,所以整理了一下iOS中用NSLog打印各种数据类型的样式。
https://blog.csdn.net/u010105969/article/details/50757136 1#ifndef __OPTIMIZE__ 2#define NSLog...NSLog(__VA_ARGS__) 3#else 4#define NSLog(...) {} 5#endif 就是上面的这段简单代码就可以让我们的NSLog只在Debug模式即开发过程中有效...,而当我们的程序处在Release模式下即程序发布中NSLog将无效,这样可以减少用户使用程序的内存开销,同时也免去了我们在开发过程中不断敲下NSLog并不断注释NSLog的繁琐工作。...首先将上面的代码写到头文件中,然后在你要是用NSLog的.m文件中导入头文件即可。...代码原理: 上面 的代码实际是定义了一个宏,这个宏名称恰好也是NSLog,我们在其他文件中使用的NSLog已经不再是原来的NSLog而是定义的宏NSLog,(此NSLog非彼NSLog---)。
此文档关于有关NSLog的功能及DEBUG预处理程序宏实际考虑为调试有用的对话 下面是NSLog调用的一个例子。...[TOC] 在哪里可以找到NSLog的输出 有史以来Founction框架的NSLog功能一直适用于iOS和OSX的个个版本。因此,您可以依赖它是可用于在任何苹果的平台,让您的应用程序将运行调试用的。...许多系统框架中使用NSLog的用于记录异常和错误,但不要求来限制及其使用于上述目的这也是完全可以接受的使用NSLog的输出变量值,参数,函数结果,堆栈跟踪等信息,所以你可以看到什么是在你的代码在运行时发生...高级详细信息 出现用于NSLog的函数定义如下: void NSLog(NSString *format, ...); 注意第一个参数是一个格式化字符串,它可以含有意味着额外的参数之后期望特殊的替换标记...NSLog是调试的朋友 每一个iOS或者OSX的开发人员无时无刻的使用NSLog调试你的程序,而且,你知道开发者可能对如何使用它的一些有趣的想法可能对你有帮助。
连真机调试的时候NSLog输出的功能也失效了,那还怎么调试! 只能自己改写NSLog的实现宏定义了,利用printf()方法来实现。...这样全局都可用,至于Prefix.pch文件是什么以及怎么创建,可以看我这篇文章:Xcode 6之后创建PCH文件 在Prefix.pch文件中添加以下代码: #ifdef DEBUG // 调试时改变NSLog...方法,输出时间、方法名、行数、输入的内容 #define NSLog(format, ...) printf("\n[%s] %s [第%d行] %s\n", __TIME__, __FUNCTION_..._, __LINE__, [[NSString stringWithFormat:format, ## __VA_ARGS__] UTF8String]); #else #define NSLog(...#endif 根据代码可以很明显地看出来,定义了如果是DEBUG调试状态,就重新定义NSLog方法,否则还是使用系统原生的实现。
更新: 在调试的时候可以把所在的类名、方法名、行数等相关信息也打印出来,更方便调试,更新一下宏定义 问题: 之前一直觉得用在调试的时候用NSLog无所谓,但是接口有很多坑的时候就需要非常多的打印,然后就越来越多的无用信息打印出来...NSLog(@"%s 第%d行 \n %@\n\n",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__]) #else #define FuLog...#endif ---- 使用: 在需要用NSLog()的地方可以用FuLog()替换,这样的话在Debug的模式就可以打印,在Release的模式下就不会打印 如何测试成不成功呢?
113755392 pch头文件的内容能够被项目中的其他所有源文件共享和访问,通常我们可在pch文件定义一些全局的宏和导入一些基础类 例如:在pch文件中添加预处理指令,可以在发布应用的时候,一次性将NsLog...#import "QCTConsts.h" #import "UIWindow+Extension.h" #pragma clang poison NSLog //移除程序中的指定identifier(...移除程序中的指定identifier(标识符) #pragma clang poison identifier 应用场景:禁止使用ObjC 的运行时API 例子: #pragma clang poison NSLog...4、发布模式关闭NSLog
break; case kCTCellularDataRestrictedStateUnknown: NSLog(@"Unknown"); break; default:...(@"Authorized"); break; case ALAuthorizationStatusDenied: NSLog(@"Denied"); break...(@"Authorized"); break; case PHAuthorizationStatusDenied: NSLog(@"Denied"); break...: NSLog(@"Restricted"); break; default: break; } !...(@"Authorized"); break; case AVAuthorizationStatusDenied: NSLog(@"Denied"); break
: NSLog(@"not Determined"); break; case ALAuthorizationStatusRestricted: NSLog(@"Restricted...: NSLog(@"not Determined"); break; case PHAuthorizationStatusRestricted: NSLog(@"Restricted...: NSLog(@"not Determined"); break; case AVAuthorizationStatusRestricted: NSLog(@"Restricted...: NSLog(@"not Determined"); break; case kCLAuthorizationStatusRestricted: NSLog(@"Restricted...: NSLog(@"not Determined"); break; case kCLAuthorizationStatusRestricted: NSLog(@"Restricted
: NSLog(@"not Determined"); break; case ALAuthorizationStatusRestricted: NSLog(@"Restricted"); break...: NSLog(@"not Determined"); break; case PHAuthorizationStatusRestricted: NSLog(@"Restricted"); break...: NSLog(@"not Determined"); break; case kCLAuthorizationStatusRestricted: NSLog(@"Restricted"); break...: NSLog(@"not Determined"); break; case kCLAuthorizationStatusRestricted: NSLog(@"Restricted"); break...(@"Authorized"); } else{ NSLog(@"Denied or Restricted"); } }];
dispatch_group_async(group, queue, ^{ NSLog(@"执行2:%@", [NSThread currentThread]); sleep(2); NSLog...dispatch_group_async(group, queue, ^{ NSLog(@"执行2:%@", [NSThread currentThread]); sleep(4); NSLog...(group, dispatch_get_main_queue(), ^{ // 切换到主线程更新UI NSLog(@"都完成后,执行"); }); NSLog(@"是否阻塞主线程"); // 不会...dispatch_async(queue, ^{ NSLog(@"执行2:%@", [NSThread currentThread]); sleep(3); NSLog(@"完成2:%@",...dispatch_async(queue, ^{ NSLog(@"执行2:%@", [NSThread currentThread]); sleep(3); NSLog(@"完成2:%@",
,@"C",@"D",@"E",@"F", nil]; NSArray *array1 = @[@"a",@"b",@"c",@"d"]; //获取数组元素个数 NSLog...(@"%lu",(unsigned long)array.count);//6 //获取数组最后一个元素 NSLog(@"%@",[array lastObject]);//F...//获取数组第一个元素 NSLog(@"%@",[array firstObject]);//A //获取对象C在数组的位置 NSLog(@"%lu",(unsigned long...遍历 for (int i = 0 ; i< array.count; i++) { NSLog(@"遍历-%@",array[i]); }...:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { NSLog(@"遍历-%@-%lu",obj,(unsigned
isEqualToString,判断两个字符串是否相等: if([str1 isEqualToString: res] == YES) NSLog(@"str1 == res")...; else NSLog(@"str1 !...else NSLog(@"str1 > str2"); uppercaseString,将字符串转换为大写。...(@"str1 == res"); 37 else 38 NSLog(@"str1 !..., book]; 23 NSLog(@"%@" , str); 24 NSLog(@"str的字符个数:%lu" , [str length]); 25
dispatch_async(queue, ^{ NSLog(@"执行2:%@", [NSThread currentThread]); sleep(3); NSLog(@"完成2:%@",...; sleep(1); NSLog(@"完成3:%@", [NSThread currentThread]); }); NSLog(@"是否阻塞主线程"); // 不会 // 执行结果: //...dispatch_async(queue, ^{ NSLog(@"执行2:%@", [NSThread currentThread]); sleep(3); NSLog(@"完成2:%@",...; sleep(1); NSLog(@"完成3:%@", [NSThread currentThread]); }); NSLog(@"是否阻塞主线程"); // 不会 // 执行结果: //...dispatch_async(queue, ^{ NSLog(@"执行2:%@", [NSThread currentThread]); sleep(3); NSLog(@"完成2:%@",
(@"str1 = %p",str1); NSLog(@"str2 = %p",str2); NSLog(@"str3 = %p",str3); NSLog(@"str4 = %...(@"%d",[str1 isEqualToString:str2]); //比较地址 NSLog(@"%d",str1 == str2); //比较大小,其实是比较的...ascii值 switch ([str1 compare:str2]) { case NSOrderedAscending: NSLog(@"升序");...= [str substringToIndex:5]; NSLog(@"%@",str4);//fgabcd NSLog(@"%@",str);//abcdefgabcd 字符串替换...(@"%@",strM);//aKKKdefgKKK NSLog(@"%lu",(unsigned long)count);//2
[context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { NSLog...(@"验证成功 刷新主界面"); }else{ NSLog(@"%@",error.localizedDescription); switch(...error.code) { caseLAErrorSystemCancel: { NSLog(@"系统取消授权,...break; } caseLAErrorUserCancel: { NSLog...(@"A passcode has not been set"); break; } default: { NSLog
@(222)] forKey:@"array1"]; // 取值 NSArray *array = [ZFJRedis zfj_valueForKey:@"array1"]; NSLog...forKey:@"arrayData"]; // 取值 NSData *data_new = [ZFJRedis zfj_valueForKey:@"arrayData"]; NSLog...(@"dict == %@",dict); 2.查询 获取全部keys // 获取全部keys NSArray *keys = [ZFJRedis zfj_allKeys]; NSLog...(@"ZFJModel表创建成功"); }else{ NSLog(@"ZFJModel表创建失败"); } 2.删除表 //删除表 BOOL isScu...]; if(isScu){ NSLog(@"数据库删除成功"); }else{ NSLog(@"数据库删除失败"); } 4.插入数据 /
领取专属 10元无门槛券
手把手带您无忧上云