美文网首页
iOS底层学习23 -- super 和@synthesize

iOS底层学习23 -- super 和@synthesize

作者: 恋空K | 来源:发表于2020-11-09 23:00 被阅读0次
    属性会自动帮我们生成一个成员变量,自动生成set方法和get方法的声明,自动生成get方法和set方法的现实
    

    @synthesize age = _age;会为age这个属性生成_age这个成员变量,也会自动帮我们生成set方法和
    get方法的实现。@synthesize age ;生成的成员变量名就是age, 也就是说@synthesize age;
    相当于@synthesize age = age;
    @property (nonatomic, assign) int32_t from;只是声明了set方法和get方法。
    现在我们不需要写@synthesize age = _age,是因为系统自动帮我们现实了。
    
    平时在使用中,在类声明中添加了property后,根本不需要在实现中添加@synthesize。
    因为OC为property属性声明添加了自动合成,也就是说系统自动帮你添加了@synthesize。
    所以,synthesize是property属性的一部分,它是系统为property生成变量的重要步骤。
    
    正常情况下,你不需要使用的synthesize,因为大多数情况下,系统都会为你自动合成。
    但是,你必须能清楚,系统自动合成有时候也是会失效的。这时候就需要你手动添加 synthesize。
    
    如果你的属性可读可写,但是你同时重写了setter/getter方法,系统不会为你自动生成成员变量。
    你需要添加@synthesize。这种情况下,你如果只重写了setter/getter其中一个,
    系统仍然会执行自动合成。
    







    [super run]这个方法,会直接从父类的类对象里面开始查找run方法,没找到的话,就按照以前正常的流程,
    在一层一层的往上找。
    调用[self class] 和[super class] ,class方法的具体现实都在NSObject里面
    [self class]只是从自己的类对象里面开始搜索class方法的实现(没找到的话就一层一层的往上查找),
    [super class]是从super类对象里面开始搜索class方法的实现(没找到的话就一层一层的往上查找),
    objc_getClass() 传入实例对象返回类对象,传入类对象,返回元类对象(当前对象的具体类型)
    
    class方法的底层现实

    super调用一个方法,消息接收者仍然是当前对象,只是该方法直接从父类中开始查找方法
    class方法的底层现实就是,谁调用这个方法,就返回谁的类型。
    


    最下面两个方法就是class方法和superclass方法的底层实现(伪代码)

    ===================消息转发的应用================



    相关文章

      网友评论

          本文标题:iOS底层学习23 -- super 和@synthesize

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