iOS 学习iOS面试题

iOS 属性和成员变量(Category)

2018-04-09  本文已影响1人  后浪普拉斯

属性和成员变量

成员变量:在类接口部分或类实现部分定义的变量,所有的成员变量起始都是实例变量,并不是真正的类变量,成员变量(实例变量)从该累的实例被创建开始存在,直到系统完全销毁这个实例,可以将称为实例成员变量。

@property (nonatomic, strong)UIView  *myView;

属性:我们声明了一个属性,苹果在将编译器从GCC转成LLVM之后,就不需要我们为属性声明实例变量。编译器没有匹配实例变量的属性,将生成 _myView 的实例变量,不需要手动创建也不需要通过@synthesize myView给变量生成setter和getter方法。而@syntheSize就是让编译器生成setter和getter方法。

Category中的property

Category 只能添加方法,不能添加实例变量。但是我们会看到在Category 中添加属性,这种情况下是不会自动生成实力变量。
在Category中添加属性,不会自动生成实例变量,这里面添加其实是setter和getter方法的声明,没有方法的实现。
匿名类别extension(匿名扩展)是可以添加实例变量的,非匿名类别是不能添加实例变量的,只能添加方法,或者属性(其实也是方法),常用的扩展是在.m文件中声明私有属性和方法。 Category理论上不能添加变量,但是可以使用rRuntime机制来弥补这种不足。
如果真的需要给category增加属性只能通过:
①objc_setAssociatedObject
②objc_getAssociatedObject

上一篇下一篇

猜你喜欢

热点阅读