属性默认为原子

属性默认为原子

问题描述:

我想摆脱CLANG/LLVM 3.0给我的烦人警告。我有以下的伊娃在我的对象设置:属性默认为原子

bool preloaded; 

而下面的属性声明:

@property(readonly) bool preloaded; 

及以下综合呼叫:

@synthesize preloaded; 

既然这样,编译器会抱怨:

Property is assumed atomic by default

如果我改变了财产申报加入“原子”:

@property(atomic,readonly) bool preloaded; 

它抱怨这件事,太:

error: expected a property attribute before 'atomic'

所以看起来,如果我这样做,我该死,如果我不该死T ...有什么我失踪了吗?

+0

嘛,'atomic'是不是一个有效的属性关键字,因此它是有道理的第二位导致错误。不过不知道第一个。 –

+0

是的,这就是我的想法,但是看到Xcode语法如何突出“原子”,我认为他们可能会将它添加为有效的属性关键字。 – Karl

+0

我试过@property(原子,只读)bool预加载;'它编译得很好。它也删除了警告。我正在使用Xcode 4.2.1。 –

看起来你有隐式原子Objective-C属性在项目设置中启用LLVM编译器警告。关闭此功能将删除警告。

如上所述,atomic不是一个有效的关键字,只是暗示了nonatomic的缺席。从苹果公司的Declared Properties documentation

You can use this attribute to specify that accessor methods are not atomic. (There is no keyword to denote atomic.)

+0

我将其标记为“正确”,因为禁用该设置会摆脱警告,但我仍然困惑为什么这些属性被标记为开头。这是LLVM中的错误吗?如果我可以保持所有警告启用,我会更加快乐...... – Karl

+2

警告不仅仅是满足编译器的游戏,它还提醒开发人员在编程时要注意某些行为。要保持启用警告但禁用此实例,请参阅Clang文档中的[控制静态分析器诊断](http://clang.llvm.org/docs/UsersManual.html#diagnostics)。 – jnic

+0

太棒了!这就像一个魅力!我现在可以编译除迂腐之外的所有警告(由于我使用## __ VA_ARGS__进行日志记录) – Karl