iOS 11 OC Xcode 9 解决关于打印 NSArray 和 NSDictionary 乱码的问题,以及不走 descriptionWithLocal 的问题

最近使用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个方法。

你可能感兴趣的:(iOS 11 OC Xcode 9 解决关于打印 NSArray 和 NSDictionary 乱码的问题,以及不走 descriptionWithLocal 的问题)