【发布时间】:2011-03-14 17:16:45
【问题描述】:
我最近尝试编译一个较旧的 Xcode 项目(以前编译得很好),现在我看到了很多这种形式的错误:
error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter
导致这些错误的代码模式总是如下所示:
// Interface:
@property (retain) NSObject * someProperty;
// Implementation:
@synthesize someProperty; // to provide the getter
- (void)setSomeProperty:(NSObject *)newValue
{
//..
}
我知道为什么会产生错误。我告诉编译器合成我的属性访问器(getter 和 setter),然后立即手动覆盖 setter。那个代码总是有点不对劲。
那么,这样做的正确方法是什么?如果我使用@dynamic 而不是@synthesize,我也必须编写getter。这是唯一的方法吗?
【问题讨论】:
-
这是否只发生在
atomic属性上?在原子属性的情况下,保持 getter/setter 对在锁定策略方面同步可能是一个好主意。如果一个部分是合成的,而另一个是自定义代码,这会很困难。 -
如果我将属性设为非原子属性,它肯定会消失。有趣的。我什至没有考虑过同步问题。
-
我访问了这个主题以找到解决这个确切问题的方法。我真的不想自己写一个getter和setter。哦,好吧……
-
默认情况下每个属性都是原子的,我们需要明确地使它们成为非原子的。原子属性是线程安全的,所以我们不能为它们实现 setter 和 getter,因为它会改变它的线程安全功能。我希望你能明白为什么会出现这个错误。
标签: objective-c xcode compiler-construction properties