打印对象和description方法
1.description方法是NSObject类的一个实例方法,所有的Objective-C类都是NSObject类的子类,因此,所有的Objective-C都具有description方法。
2.description方法通常用于实现一个功能:当程序直接打印该对象时,系统会输出该对象的“自我描述”信息,用于告诉外界该对象具有的状态信息。
3.NSObject类提供的desription方法总是返回该对象的首地址,这个返回值并不能实现“自我描述”的功能,因此,如果用户需要自定义类能实现“自我描述”的功能,必须重写NSObject类的description方法。
很多时候,重写description方法可以返回该对象所有令人感兴趣的信息所组成的字符串,格式通常如下:
<类名 [实例变量1 = 值1, 实例变量2 = 值2,...]>
示例:
//FKApple.h
#import <Foundation/Foundation.h>
@interface FKApple : NSObject
@property (nonatomic , copy) NSString* color;
@property (nonatomic , assign) double weight;
- (id) initWithColor: (NSString*) color weight : (double) weight;
@end
//FKApple.m
#import "FKApple.h"
@implementation FKApple
@synthesize color = _color;
@synthesize weight = _weight;
- (id) initWithColor:(NSString *)color weight:(double)weight {
if (self = [super init]) {
self.color = color;
self.weight = weight;
}
return self;
}
- (NSString*) description {
return [NSString stringWithFormat: @"<FKApple[_color = %@, _weight = %g]>", self.color, self.weight];
}
@end
//主函数
#import <Foundation/Foundation.h>
#import "FKApple.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
FKApple* a = [[FKApple alloc] initWithColor:@"红色" weight:5.68];
NSLog(@"%@" , a);
}
}
效果:
从上面的运行结果可以看出,通过重写FKApple类的description方法,就可以让系统在打印FKApple对象时打印出该对象的“自我描述”信息。