Xcode 对引用类型(对象)使用 "assign" 属性时发出警告

Xcode warning if using "assign" attribute for reference types (objects)

当一个人使用 assign ARC 中的属性:

@property (nonatomic, assign) NSNumber *myNumber;

我把一个long属性转换成NSNumber不小心忘了改属性从 assignstrong

没有编译时警告或错误,运行-time 错误只会偶尔发生,而且是非常隐蔽的崩溃。只有在调试时才会出现崩溃和 "message sent to a deallocated instance" 之类的错误,这是因为在开发中使用了僵尸对象。

对于非调试版本,崩溃不会经常发生,并且(例如,通过 Crashlytics)报告为 EXC_BAD_ACCESS - KERN_INVALID_ADDRESS。我假设崩溃是由这个问题引起的。

我知道 assign 是一个对象的有效选项,如果你想保持对它的弱引用,并且你不希望指针指向当对象被释放时自动变为 NULL。但是,我想应该有一个可以打开或关闭的警告,因为 assign 不是你通常想在 ARC 中使用的东西,但我找不到它构建设置。

不幸的是,我找不到任何警告标志。不过,拥有它会是一件很酷的事情。您可以参考 this site 以获取您可以在 Xcode 中启用的所有 clang 警告的列表。

从技术上讲,这不是我问题的答案,因为我的问题询问是否有启用警告的设置,根据接受的答案,答案是 "no"。

但是,如果您想找到此类情况,可以使用正则表达式进行全局搜索。您必须将查找选项切换为 "Regular Expression"。

找到类似

的内容

@property (nonatomic, assign) NSNumber* ...

你可以使用正则表达式

assign\) [a-zA-Z]+\*

你可以玩玩它。例如,如果您在 属性 声明中的类型和星号之间放置一个 space,就像这样

@property (nonatomic, assign) NSNumber * ...

你只需要在像这样转义星号的斜杠前添加一个 space

assign\) [a-zA-Z]+ \*