美文网首页iOSiOS学习ios 学习
iOS 的description 方法

iOS 的description 方法

作者: sttech | 来源:发表于2017-07-29 14:38 被阅读659次

    我们知道在开发中会经常的使用的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
    
    

    相关文章

      网友评论

        本文标题:iOS 的description 方法

        本文链接:https://www.haomeiwen.com/subject/pftclxtx.html