今天学习一下description这个方法,这个方法是iOS内部已经实现的方法,主要用于日志输出,在控制台nslog的打印,首先创建一个Person类
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSInteger _age;
NSString *_name;
}
@property NSInteger age;
@property NSString *name;
@end
#import "Person.h"
@implementation Person
@end
然后在外界调用Person *p = [[Person alloc] init];
p.age = 10;
p.name = @"jack";
NSLog(@"%@",p);
这个时候控制台只会输出类名:内存地址 <Person: 0x61800003fcc0>然后我们重写Person的description方法
#import "Person.h"
@implementation Person
-(NSString *)description{
//切记不能再这个方法里面打印这个方法,不然的话会造成死循环
NSLog(@"%@",self);
return [NSString stringWithFormat:@"age = %ld and name = %@",_age,_name];
}
@end
这样再次打印就会出现以下信息
2017-07-14 11:01:47.568 Description[68642:1073141] age = 10 and name = jack
其实它还有一个类方法,默认打印的话会返回类名#import "Person.h"
@implementation Person
-(NSString *)description{
//切记不能再这个方法里面打印这个方法,不然的话会造成死循环
// NSLog(@"%@",self);
return [NSString stringWithFormat:@"age = %ld and name = %@",_age,_name];
}
+(NSString *)description{
return @"123";
}
@end
来我们在外界调用看看
Class c = [p class];
NSLog(@"++%@",c);
控制台会返回
2017-07-14 11:05:44.973 Description[68726:1076148] ++123
这样我们就可以自定义打印信息啦还有很多的打印方法
// 打印p对象地址
NSLog(@"%@",p); // <Person: 0x61800003fcc0>
// 打印p指针的地址
NSLog(@"%p",p); // 0x61800002b1a0 对象和指针地址一致
// 指针变量的地址
NSLog(@"%p",&p);// 0x7fff5aeb79d8
// NSLog不能%s无法输出带有中文的文件路径,可以用c语言中的printf和%s来代替
NSLog(@"%s",__FILE__);
printf("%s",__FILE__);
// 输出当前方法
NSLog(@"%s",__FUNCTION__);
//输出当前行数
NSLog(@"%d",__LINE__);