属性会自动帮我们生成一个成员变量,自动生成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方法的底层实现(伪代码)
===================消息转发的应用================
网友评论