我正在尝试为ARC上的属性创建一个setter / getter。
我有这个:
@property (strong, atomic) MyMytableArrayClass *myArray;
-(MyMytableArrayClass*) myArray {
@synchronized(self) {
if (_myArray == nil) { //*
_myArray = [[MyMytableArrayClass alloc] init]; //*
_myArray.flag = YES; //*
}
return _myArray; //*
}
}
-(void) setMyArray:(MyMytableArrayClass*)anArray {
@synchronized(self) {
_myArray = anArray; //*
}
}
我在标有// *的行上有错误使用未声明的标识符_myArray 为什么?
答案 0 :(得分:4)
编译器 only 自动合成属性的实例变量 如果它必须在至少一个存取方法中合成。
如果为属性实现setter和getter方法(或者如果实现的话) 对于只读属性的getter,实例变量是而不是合成的 自动。
在这种情况下,您必须添加
@synthesize myArray = _myArray;
如果您需要实例变量,请显式。或者,您可以申报
_myArray
作为课程扩展中的ivar。
答案 1 :(得分:1)
编译器将在所有情况下自动合成一个实例变量,它也会合成至少一个存取方法。如果为readwrite属性实现getter和setter,或者为readonly属性实现getter,编译器将假定您正在控制属性实现,并且不会自动合成实例变量。
如果您仍需要实例变量,则需要请求合成:
@synthesize property = _property;