美文网首页
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