objective-c - 为什么我不能在 Objective C 中以这种方式初始化 getter?

标签 objective-c ios xcode getter self

我有点困惑为什么我不能用这种方式初始化 getter:

@synthesize stack = _stack;

- (NSMutableArray *) stack
{
    if (self.stack == nil) {
        self.stack = [[NSMutableArray alloc] init];
    }
    return self.stack;
}

我知道如果我用 _stack 替换 self.stack,它会工作得很好,但我不知道为什么我不能使用 self.stack。不过,我稍后在代码中使用 self.stack 没有问题。

最佳答案

问题出在以下行:

if (self.stack == nil) 

相当于

if ([self stack] == nil)

因此,您在自身内部调用 getter 方法,这会导致无限递归。您可以通过寻址 ivar 本身来移除对 getter 的调用:

- (NSMutableArray *) stack
{
    if (_stack == nil) {
        _stack = [[NSMutableArray alloc] init];
    }
    return _stack;
}

关于objective-c - 为什么我不能在 Objective C 中以这种方式初始化 getter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403259/

相关文章:

iOS:使用核心蓝牙库从不同的 View Controller 进行通信

javascript - Bootstrap 导航栏在 iPad 上不起作用

ios - 在 iOS 8 中检测 Apple Watch

iphone - iOS 6 - 处理顶部和底部的黑色条纹

c++ - react native 0.40.0 : Ordered comparison between pointer and zero ('NSNumber *' and 'int' )

ios - 以逗号分隔的像素值 (int8) 到 UIImageView 的字符串

iphone - Xcode - 从不同的 View 更新 ViewController 标签文本

ios - 从 Apple Watch 获取心率信息至配对的 iPhone

ios - iPhone - PRFRelation 不保存对象

ios - Swift 2.1 - 自定义 UITableViewCell 类中的 IBOutlet 属性为 nil