iOS description方法和descriptionWithLocale:方法 解决中文现问题

在输出字符串、一些基本数据类型以及 OC 对象,我们都可以使用 NSLog 函数进行输出。本次主要谈谈使用NSLog输出 OC 对象的应用。

       一般情况下,我们在使用NSLog 和 %@ 输出某个对象时,就会调用这个对象的 description 方法,它的返回值就是 NSString 字符串类型,所以 description 默认实现返回的格式是 <类名: 对象的内存地址>,

在必要情况下,我们需要重写description方法以达到改变输出结果目的,覆盖description方法的默认实现。重写完description方法后,再调用NSLog(@”%@”,p)时输出结果不再是<类名: 内存地址>,而是返回的字符串。

注意:千万不要在 description 方法中同时使用 %@ 和 self,如果这样使用了,那么最终会造成程序死循环,原因是因为:如果使用了%@和self,代表要调用self的description方法,最终就是循环调用description方法



一,对于NSArray和NSDictionary用descriptionWithLocale:方法

#import <Foundation/Foundation.h>


@interface NSArray (Log)


@end


@interface NSDictionary (Log)


@end


#import "NSArray+Log.h"


@implementation NSArray (Log)


- (NSString *)descriptionWithLocale:(id)locale

{

    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)


- (NSString *)descriptionWithLocale:(id)locale

{

    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




二,对于一般的对象用description方法

#import <Foundation/Foundation.h>


@interface HMPerson : NSObject

@property (nonatomic,copy)NSString *name;

@property (nonatomic,assign)int age;


@end


#import "HMPerson.h"


@implementation HMPerson

- (NSString *)description {

    

    return [NSStringstringWithFormat:@"%@{name:%@,age:%d}",[superdescription],self.name,self.age];

}

@end




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值