ios nslog 例子_iOS项目之NSLog相关

这算是在项目中最常用的命令了,方便程序员查看日志数据,便于程序调试。在开发中我们经常会进行一些设置,下面就来简单的说一说:

先来看看普通的NSLog:

- (void)viewDidLoad {

[super viewDidLoad];//准备的数据

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"TestNSLogData" ofType:@"plist"];

NSMutableDictionary*dict =[NSMutableDictionary dictionaryWithContentsOfFile:filePath];

NSLog(@"%@", dict);

}

输出的结果为:

2017-03-09 16:27:24.270 DictionaryTest[11495:322828] {

Person={

age= 20;

name= "\U5f20\U4e09";

};

}

于是发现了一些令人不愉快的问题,下面就一个一个来解决吧。

首先解决日期输出。有些时候我们需要一个干净的日志输出,可NSLog里自带了一些东西,于是就得想办法取消那些麻烦的输出,只取我们需要的东西,所以在这里我们就使用了C语言了输出方法了(printf / fprintf):

printf("%s", [[NSString stringWithFormat:@"%@", dict] UTF8String]);

输出结果为:

{

Person={

age= 20;

name= "\U5f20\U4e09";

};

}

现在输出的结果就非常干净了,而且还可以自己自定义,让它满足自己的风格,然后封装成宏定义,自己看着舒服就OK。下面是我的宏定义:

#define NSLog(FORMAT, ...) fprintf(stderr, "\n\n******(class)%s(begin)******\n(SEL)%s\n(line)%zd\n(data)%s\n******(class)%s(end)******\n\n", [[[NSString stringWithUTF8String: __FILE__] lastPathComponent] UTF8String], __FUNCTION__, __LINE__, [[NSString stringWithFormat: FORMAT, ## __VA_ARGS__] UTF8String], [[[NSString stringWithUTF8String: __FILE__] lastPathComponent] UTF8String]);

输出结果为:在这里显示了类名,方法名,命令所在行数,数据

******(class)ViewController.m(begin)******(SEL)-[ViewController viewDidLoad]

(line)35(data){

Person={

age= 20;

name= "\U5f20\U4e09";

};

}******(class)ViewController.m(end)******

然后再解决中文显示的问题。在日志输出中,中文输出总显示unicode编码格式,不便于程序员阅读。于是添加了两行代码:

- (void)viewDidLoad {

[super viewDidLoad];//准备的数据

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"TestNSLogData" ofType:@"plist"];

NSMutableDictionary*dict =[NSMutableDictionary dictionaryWithContentsOfFile:filePath];//数据格式转换

NSData *jsonData =[NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];

NSString*jsonStr =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

NSLog(@"%@", jsonStr);

}

输出的结果为:

******(class)ViewController.m(begin)******(SEL)-[ViewController viewDidLoad]

(line)38(data){"Person": {"age" : 20,"name" : "张三"}

}******(class)ViewController.m(end)******

这样就能正确显示中文了。但考虑到以后经常会使用到这两行代码,于是写了一个NSObject的分类,将这个代码封装成一个方法,便于以后的使用。

//.h 文件

#import

@interfaceNSObject (Extension)- (NSString *)sjx_jsonString;@end

/*---------- 华丽的分隔线 ----------*/

//.m 文件

#import "NSObject+Extension.h"

@implementationNSObject (Extension)- (NSString *)sjx_jsonString

{if (!self) returnnil;//数据格式转换

NSData *jsonData =[NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:nil];return[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

}@end

这样输出时就这样写:

NSLog(@"%@", [dict sjx_jsonString]);

结果和上面一样。

如果项目中使用到了MJExtension框架,这个分类其实也可以不必添加的,输出的时候这样写:

NSLog(@"%@", [dict mj_JSONString]);

输出的结果为:

******(class)ViewController.m(begin)******(SEL)-[ViewController viewDidLoad]

(line)38(data){"Person":{"age":20,"name":"张三"}}******(class)ViewController.m(end)******

只不过数据结构就不是那么好看,不过现在网上JSON在线编辑器也蛮多的,转换一下就OK了。

最后考虑到性能问题。在项目上线发布的时候,项目里是不需要NSLog输出的,所以需要设置一下DEBUG 和 RELEASE。

方法一:

方法二:使用项目中 xxxxxx.pch文件中添加宏定义,这也是项目中流行的做法:

#ifdefDEBUG#define NSLog(FORMAT, ...) fprintf(stderr, "\n\n******(class)%s(begin)******\n(SEL)%s\n(line)%zd\n(data)%s\n******(class)%s(end)******\n\n", [[[NSString stringWithUTF8String: __FILE__] lastPathComponent] UTF8String], __FUNCTION__, __LINE__, [[NSString stringWithFormat: FORMAT, ## __VA_ARGS__] UTF8String], [[[NSString stringWithUTF8String: __FILE__] lastPathComponent] UTF8String]);

#else

#define NSLog(FORMAT, ...) nil

#endif

这样就完美了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值