Kev*_*ers 8 properties objective-c synthesize
因此自动合成属性非常棒.但是,当您同时提供getter和setter时,会出现错误.
@property (strong, nonatomic) NSArray *testArray;
- (NSArray *)testArray {
return _testArray;
}
- (void)setTestArray:(NSArray *)testArray {
_testArray = testArray;
}
Run Code Online (Sandbox Code Playgroud)
错误:Use of undeclared identifier '_testArray'.
添加@synthesize testArray = _testArray;解决了问题.我只是想知道为什么会这样?
当您同时提供getter和setter时,通常根本不需要实例变量,即只需转发这些消息或将数据存储在其他位置.
只要其中一个缺失,就需要使用ivar来合成该功能.
如果我没记错的话,对于只读属性,模拟假设也是如此.
在最近的编译器/运行时,在您使用时
@synthesize testArray = _testArray;
Run Code Online (Sandbox Code Playgroud)
编译器创建
_testArray实例变量,如果它不已经存在;testArray方法,如果你还没有实现它;setTestArray:方法,如果你还没有实现它.如果你使用
@synthesize testArray;
Run Code Online (Sandbox Code Playgroud)
testArray如果它不存在,编译器会创建一个ivar,而不是_testArray.
如果你不使用@synthesize,并依赖于自动合成,_testArray只有在(两者都必须适用)时才会创建ivar
_testArray 不存在;readonly,getter和/或setter for readwrite).在您的示例中,您已实现了所有方法,因此自动合成不会合成任何方法,因此它不会创建ivar.您可以_testArray自己声明ivar,也可以像使用的那样使用显式合成.
| 归档时间: |
|
| 查看次数: |
4277 次 |
| 最近记录: |