问题:请问输出是什么?为什么?
NSObject+Test.h:
@interface NSObject (Test)
+(void) func;
@end
NSObject+Test.m:
@implementation NSObject (Test)
-(void)func {
NSLog(@"%@", NSStringFromSelector(_cmd));
}
@end
main.m:
int main(int argc, const char * argv[]) {
@autoreleasepool {
[NSObject func];
}
return 0;
}
答案就是:func
明明没实现啊?怎么打印了实例方法?
原因就是下图:
class对象中动态添加了-func方法,+func方法被加入到了meta-class的对象中。调用方法会沿着superclass指针去父类中寻找方法,而NSObject的meta-class的superclass是NSObject的class,所以最终会找到class对象中的-func方法,并完成调用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)