1

我有一个 NSArray 类型的数组,如下所示:

@property (nonatomic, strong) NSArray *myArray;

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

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

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

4

2 回答 2

1

您的 getter 方法正在递归调用自身,因为

self.myArray

由编译器翻译成

[self myArray]

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

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

- (NSArray *)myArray
{
    return ([_myArray count] == 0) ? nil : _myArray;
}
于 2013-10-18T19:05:55.017 回答
0

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

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

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

于 2013-10-18T19:06:26.490 回答