-
@property
本质 声明&实现属性同名set&get
方法,并且生成属性同名加下划线的成员变量
如果添加readOnly
,就只声明属性同名get
方法并生成带下划线的成员变量
如果添加readOnly
后,同时重写了get
方法, 就不会自动生成同名带下划线的成员变量了
可以通过@synthesize命令合成:
e.g. @synthesize managedObjectContext = _managedObjectContext;
- 在协议中的方法是没有实现的(遵循协议的类去实现), 协议中的属性只声明属性同名
set&get
方法,不生成属性同名加下划线的成员变量
因为@property
自动成员变量使用的是一种"懒加载"机制,不实现属性同名方法则系统无法检测何时何处需要使用成员变量并依此生成
如果添加readOnly
,就只声明属性同名get
方法,不会生成setter
方法和带下划线的同名成员变量
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
相当于
- (CLLocationCoordinate2D)coordinate;
所以为了方便,如果遇到协议中出现属性,直接将属性拷贝出来即可,如果需要外部设置,在.h
中声明并且把readOnly
关键字去掉
- 之所以以这样的方式提供,是因为
OC
是单继承,多遵循