我们知道在开发中会经常的使用的NSLog来进行一些内容的日志输出。接下来主要讲述的是OC对象的NSLog的输出,一般情况下,我们在使用NSLog和%@输出某个对象的时候,会调用description的方法,返回值类型是一个NSString 类型的,所以description默认的返回的格式是<类名:对象地址>
屏幕快照 2017-07-29 13.38.29.png
- 千万不要在 description 方法中同时使用 %@ 和 self,如果这样使用了,那么最终会造成程序死循环,原因是因为:如果使用了%@和self,代表要调用self的description方法,最终就是循环调用description方法
在开发中的Array 和Dictrony 的分类中中可以重写它们的descriptionWithLocale:indent 方法 在xcode8以前可以重写descriptionWithLocale方法,进行log的输出
@implementation NSArray (Log)
//-(NSString *)description
//{
//
// return [super description];
//}
-(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
NSMutableString * mutString = [NSMutableString stringWithString:@"\n[\n"];
[self enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[mutString appendFormat:@"\t%@\n",obj];
}];
[mutString stringByAppendingString:@"]\n"];
return mutString.copy;
}
@end
@implementation NSDictionary (Log)
//-(NSString *)description
//{
//
// return [super description];
//}
-(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
NSMutableString * mutString = [NSMutableString stringWithString:@"\n{\n"];
[self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
[mutString appendFormat:@"\t%@ = %@\n",key,obj];
}];
[mutString stringByAppendingString:@"\n}\n"];
return mutString.copy;
}
@end