iOS进阶_Log分类打印日志自动转换中文

description方法是NSObject类的一个实例方法,因此所有的Object-C对象都有description方法。description方法返回的永远是字符串。
对于一个Person类,如果没有重写description方法,NSLog(@“%@”,p),输出的是p的地址,而我们想要的效果是打印出person的成员变量,所以我们可以在Person类里重写description方法。

-(NSString *)description{  

    NSString * string = [NSString stringWithFormat:@"<Person: name = %@ age = %ld>",self.name,self.age];  

    return string;  

} 

另外一种方式创建分类,重写- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level;方法

这里写图片描述

这是未做处理前的log,我们可以看到编辑器没有按照我们需要的方式打印中文

创建分类

这里写图片描述

注意:Xcode8.0以后,- (NSString *)descriptionWithLocale:(id)locale方法不再可用,需要使用- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level

NSArray+Log.h

#import <Foundation/Foundation.h>

@interface NSArray (Log)
@end

@interface NSDictionary (Log)
@end

NSArray+Log.m

#import "NSArray+Log.h"

@implementation NSArray (Log)

/**
 *  输出正常NSArray的中文
 */

- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
    NSMutableString *strM = [NSMutableString stringWithString:@"(\n"];

    [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        [strM appendFormat:@"\t%@,\n", obj];
    }];

    [strM appendString:@")"];

    return strM;
}

@end


@implementation NSDictionary (Log)
/**
 *  输出正常NSDictionary的中文
 */
- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
    NSMutableString *strM = [NSMutableString stringWithString:@"{\n"];

    [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        [strM appendFormat:@"\t%@ = %@;\n", key, obj];
    }];

    [strM appendString:@"}\n"];

    return strM;
}

@end

在运行一下,如愿看到中文输入了

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值