腾讯面试题 iOS

腾讯面试题 iOS,第1张

问题:请问输出是什么?为什么?

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方法,并完成调用。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/994086.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存