"description" 方法究竟在哪里被覆盖?

Where exactly does the "description" method get overriden?

description方法是NSObjectclass的class方法。我猜是class方法,因为NSObject无法初始化

当我这样做时:

NSLog(@"%@", [NSObject description]);

打印出来:

NSObject

但是当我创建一个直接继承自 NSObject 的 class 并执行此操作时:

MyNewClass *obj = [[MyNewClass alloc] init];
NSLog(@"%@", obj);

这会打印出如下内容:

<MyNewClass: 0x4b234a0>

我没有专门覆盖 description 方法,它是如何被我的新 class 覆盖的?

那是因为NSObject有两个方法:

+ (NSString *)description; // Class method 
- (NSString *)description; // Instance method 

前者在 NSObject class and later one in in NSObject Protocol 中定义。