您的位置:首页 > 移动开发 > IOS开发

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

2015-09-07 11:05 991 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  格式化 class