最近使用Xcode9 打印【NSLog("array = %@", NSArray); 】时发现打印出来的是乱码,明明已经添加了 NSArray+Log 的分类,之前好好的怎么现在就变了呢?
通过在类别中重写
descriptionWithLocale、description、descriptionWithLocale:indent:
这三个方法测试,发现如果代码中使用
NSString *str = [NSString stringWithFormat:@"%@", array]
这个方法将数转换为字符串,仍旧会走 descriptionWithLocale 方法;
而使用 NSLog(@"array = %@", array); 这个方法打印一个数据,不会走 descriptionWithLocale 方法,却走 description 方法!
总结如下:
// stringWithFormat 的时候会走
- (NSString *)descriptionWithLocale:(id)locale
// NSLog 的时候会走 、调试时鼠标放到变量上点击后面的’!‘打印时会走
- (NSString *)description
以前只重写了 descriptionWithLocale 就可以将数组、字典中的乱码正常显示,现在如果需求跟我一样使用上面两种方式转换为字符串,就要重写2个方法。