阅读ProgrammingWithObjectiveC,我可以说:
无需明确指定强属性,因为它是默认属性。
如果我省略项目中属性的'strong'属性,
@property (nonatomic) NSString *string;
它给了我一个警告:
未指定'assign','retain'或'copy'属性 - 假定'assign'为
又名。
-Wobjc属性-NO-属性
所以不知怎的,编译器似乎在想我还在做手动引用计数,否则就不会有任何警告。
另外,在创建一个新的空项目时,如果没有“强”属性,它就不会发出警告,因此它必须与当前项目设置有关,甚至可能还有一些无法访问的标记通过用户界面。该项目相当陈旧(约2年),同时经历了几个迁移步骤(XCode 3> 4> 5,Non-ARC> ARC等)。
我在项目设置中到处都是,但某处似乎是一个缺少的勾选标记。
遇到同样问题的人?
答案 0 :(得分:3)
刚搜索过,最近的构建属性是CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES
,我怀疑它有任何关系。
您可以通过选择"全部"来检查目标覆盖的默认参数。和"级别" “构建设置”视图中的选项。
检查目标默认为“否”但“正在变为”的警告。
答案 1 :(得分:1)
确保您拥有最新版本的Xcode。这是一个新的编译器功能,它的工作原理在最近的更新中已经多次更改。
确保您的项目配置为使用clang / llvm而不是gcc。我不记得gcc是否支持ARC(有人评论他们知道吗?)但它肯定不支持所有功能。除非你改变它,否则旧的Xcode项目将使用gcc。所有最近的语言更改仅在clang / llvm
中实现您是否启用了ARC?这将改变行为,因为我们要注意ARC可以在项目范围内启用或禁用,也可以禁用特定文件。
Xcode中的某些更改仅适用于新项目,旧项目已配置为禁用它们。查看与ARC相关的任何未设置为默认值的设置。