请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

5-3.如果该类方法没有实现,则会调用同名的实例方法

5-3.文章中提到当调用一个类方法时,如果该类方法没有实现,则会调用同名的实例方法。这样说我有点不理解,应该是只针对NSObject类吧,其他类没有这个特性吧。

正在回答 回答被采纳积分+3

1回答

于海 2018-04-26 14:00:24

具体你可以看下那个对象,类对象,元类对象的isa 和super class指针的指向 尤其关注根元类对象的这两个指针的指向 你就会明白了

0 回复 有任何疑惑可以回复我~
  • 提问者 慕UI9212626 #1
    你说的这个关系我是理解的,比如先用代码试一下,这个例子:
    #import <Foundation/Foundation.h>
    @interface TestClass : NSObject
    - (void)testMethod;
    + (void)testMethod;
    @end
    
    #import "TestClass.h"
    @implementation TestClass
    - (void)testMethod
    {
        NSLog(@"aaaaa");
    }
    @end
    
    在其他类中调用[TestClass testMethod];是会崩溃的啊。
    而且我觉得也不可能会调用到,因为整个流程是这样的:
    TestClass调用类方法的时候会首先从元类对象的方法列表中查找,没有,则会继续去元类的父类中查找(也就是NSObject的元类中查找),当然也没找到,则继续去父类中查找(也就是NSObject类对象中查找),当然也没有,则继续去父类中查找(也就是NSObject类对象的父类nil),则直接崩溃,怎么会调用到TestClass类对象中的同名方法呢?求解。多谢!
    回复 有任何疑惑可以回复我~ 2018-04-28 21:43:29
  • 于海 回复 提问者 慕UI9212626 #2
    你方法添加的位置不对 应该放到nsobject的分类里面
    回复 有任何疑惑可以回复我~ 2018-04-29 10:17:01
  • 于海 回复 提问者 慕UI9212626 #3
    你的例子和问题是不符的 所以验证结果没有意义,给你改正一下:
    
    @interface NSObject (Test)
    - (void)testMethod;
    @end
    
    @implementation NSObject (Test)
    
    - (void)testMethod
    {
        NSLog(@"aaaaa")
    }
    @end
    
    回复长度有限 接着看下一个回复
    回复 有任何疑惑可以回复我~ 2018-04-29 10:34:59
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信