数组设置器的代码错误

时间:2013-10-18 19:01:12

标签: ios nsarray setter

我有一个类型为NSArray的数组如下:

@property (nonatomic, strong) NSArray *myArray;

在这个数组的setter中,我想检查数组计数是否为0,然后返回nil,否则返回数组。我这样做如下:

- (NSArray *)myArray
{
    return ([self.myArray count] == 0) ? nil : self.myArray;
}

如果我为NSArray返回nil,我没有得到任何构建错误,但它给我运行时错误的访问代码错误。我在这里犯了什么错误?

2 个答案:

答案 0 :(得分:1)

你的getter方法是递归调用自身的,因为

self.myArray

由编译器翻译为

[self myArray]

这最终导致堆栈溢出(!)。

在属性的setter或getter方法中,您必须访问 相关的实例变量,例如

- (NSArray *)myArray
{
    return ([_myArray count] == 0) ? nil : _myArray;
}

答案 1 :(得分:0)

在调用此方法之前,您是否在其他任何位置实例化数组?它必须存在才能访问它。

_myArray = [NSArray arrayWithObjects:@"one",@"two",nil];

或创建数组的许多其他技术之一。