假设我有一堂课。我想通过以下方式声明一个属性:
- 从类外部,如果以编程方式访问,它应该是只读的;
- 应该可以使用插座从 Interface Builder设置值;
- (从课堂内部它应该是可写的,但我知道该怎么做)。
我想出的“解决方案”是写一个一次性设置器:
- (void) setA: (ClassA *)a {
if (aHaveBeenSet)
return;
else {
// do what a setter have to do
aHaveBeenSet == YES;
}
}
但是这个 setter 仍然可以从代码中调用(虽然只有一次有效),所以它不是一个很好的解决方案。
另一种方法是将 ivar 标记为 IBOutlet 并使属性readonly
如下所示:
@interface MyClass : NSObject {
IBOutlet ClassA *a;
}
@property (readonly) ClassA *a;
@end
但是根据这个答案,这是一种糟糕的风格,并且使内存管理不清楚。
有任何想法吗?