12.iOS格式化日志输出的方法以及在发布状态自动关闭NSLog方法

1.自定义类的格式化日志输出

        当我们自定义一个类,需要打印该类对应的对象信息时,往往只能打印出他们的内存,如果我们想打印出我们想看到的一些数据成员就必须要一一打印,这样往往比较麻烦。所以我们需要格式化日志输出,使得NSLog出我们需要的信息:

               方法是在该类实现文件中重写description 方法,在该方法的返回值中格式化要打印的内容即可。

-(NSString *)description
{
    return <#expression#>
}

2.系统类的格式化日志输出

        这里我们需要以系统类创建一个分类,然后重写- (NSString *)descriptionWithLocale:(id)locale; 注意这里不能重写description 方法,在该方法中做一些格式化操作即可。下面是对NSArray和NSDictionary的方法进行重写:

#import <Foundation/Foundation.h>

@implementation NSDictionary (Log)
- (NSString *)descriptionWithLocale:(id)locale
{
    NSMutableString *str = [NSMutableString string];
    
    [str appendString:@"{\n"];
    
    // 遍历字典的所有键值对
    [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        [str appendFormat:@"\t%@ = %@,\n", key, obj];
    }];
    
    [str appendString:@"}"];
    
    // 查出最后一个,的范围
    NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];
    // 删掉最后一个,
    [str deleteCharactersInRange:range];
    
    return str;
}
@end

@implementation NSArray (Log)
- (NSString *)descriptionWithLocale:(id)locale
{
    NSMutableString *str = [NSMutableString string];
    
    [str appendString:@"[\n"];
    
    // 遍历数组的所有元素
    [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        [str appendFormat:@"%@,\n", obj];
    }];
    
    [str appendString:@"]"];
    
    // 查出最后一个,的范围
    NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];
    // 删掉最后一个,
    [str deleteCharactersInRange:range];
    
    return str;
}
@end
            两个类的重写可以一起放在一个.m文件中,编译时系统会自动编译。这样即可实现格式化日志输出了。


3.发布状态自动关闭NSLog方法

       在pch文件中键入以下代码即可:

#ifdef DEBUG // 调试状态, 打开LOG功能
#define HMLog(...) NSLog(__VA_ARGS__)
#else // 发布状态, 关闭LOG功能
#define HMLog(...)
#endif



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值