我想使用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/