美文网首页
找茬--(类方法和实例方法有啥区别?)

找茬--(类方法和实例方法有啥区别?)

作者: 滨滨_57b5 | 来源:发表于2019-02-21 16:31 被阅读0次

    区别:

    • self在实例方法中是对象的首地址;在类方法中是Class
    • 类方法存储在元类对象的方法列表中;实例方法存储在类对象的方法列表中

    代码:

    CFPerson *person = [[CFPerson alloc]init];
    [person eating];//实例方法调用
    [CFPerson sleeping];//类方法调用
    
    经过编译器转换变为:
    
    ((void(*)(id,SEL))(void*)objc_msgSend((id)person,sel_registerName("eating"));
    ((void(*)(id,SEL))(void*)objc_msgSend(objc_getClass("CFPerson"),sel_registerName("sleeping"));
    
    • objc_msgSend是通过汇编实现的

    实验一:实例对象调用类方法

    [person performSelector:@selector(sleeping)];
    

    实验二:类对象调用实例方法

    [CFPerson performSelector:@selector(eating)];
    
    • 以上俩种调用都会崩溃

    相关文章

      网友评论

          本文标题:找茬--(类方法和实例方法有啥区别?)

          本文链接:https://www.haomeiwen.com/subject/yqaryqtx.html