在ARC上为原子属性创建Setter Getter时出错

时间:2014-05-08 17:38:23

标签: objective-c cocoa automatic-ref-counting setter getter

我正在尝试为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 为什么?

2 个答案:

答案 0 :(得分:4)

编译器 only 自动合成属性的实例变量 如果它必须在至少一个存取方法中合成。

如果为属性实现setter和getter方法(或者如果实现的话) 对于只读属性的getter,实例变量是而不是合成的 自动。

在这种情况下,您必须添加

@synthesize myArray = _myArray;
如果您需要实例变量,请显式

。或者,您可以申报 _myArray作为课程扩展中的ivar。

答案 1 :(得分:1)

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html

  

编译器将在所有情况下自动合成一个实例变量,它也会合成至少一个存取方法。如果为readwrite属性实现getter和setter,或者为readonly属性实现getter,编译器将假定您正在控制属性实现,并且不会自动合成实例变量。

     

如果您仍需要实例变量,则需要请求合成:

@synthesize property = _property;