- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我最近尝试编译一个较旧的 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。这是唯一的方法吗?
最佳答案
我也遇到了同样的问题,经过一番研究,我对这个问题的结论如下:
编译器会警告您声明为原子的 @property
(即通过省略 nonatomic
关键字),但您提供的如何同步访问的不完整实现到那个属性。
要使该警告消失:
如果您将 @property
声明为原子,则执行以下操作之一:
@dynamic
或;@synthesize
并保留合成的 setter 和 getter 或;如果您使用 (nonatomic)
声明 @property
,那么您可以混合使用手动和合成的 getter 和 setter 实现。
更新:关于属性自动合成的说明
从 LLVM 4.0 开始,CLang 为非 @dynamic
声明的属性提供自动综合。默认情况下,即使您省略了 @synthesize
,编译器也会为您提供 getter 和 setter 方法。然而,原子属性的规则还是一样的:要么让编译器同时提供 getter 和 setter,要么自己实现它们both!
关于objective-c - 错误 : writable atomic property cannot pair a synthesized setter/getter with a user defined setter/getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3227176/
我是一名优秀的程序员,十分优秀!