我想使用ARC在我的ObjC类中重写getter和setter。

.h文件

@property (retain, nonatomic) Season *season;

.m文件
@synthesize season;


- (void)setSeason:(Season *)s {
    self.season = s;

    // do some more stuff
}

- (Season *)season {
    return self.season;
}

我在这里想念什么吗?

最佳答案

是的,这些是无限递归循环。那是因为

self.season = s;

由编译器翻译成
[self setSeason:s];


return self.season;

被翻译成
return [self season];

摆脱点访问器self.的影响,您的代码将是正确的。

但是,如果您的属性season和变量season共享相同的名称,则此语法可能会造成混淆(尽管Xcode通过对这些实体进行不同的着色可以在某种程度上减轻混淆)。可以通过以下方式显式更改变量名:
@synthesize season = _season;

或者更好的是,完全省略@synthesize指令。现代的Objective-C编译器将自动为您合成访问器方法和实例变量。

关于objective-c - 自定义Getter&Setter iOS 5,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8730816/

10-10 20:29