Xcode 对引用类型(对象)使用 "assign" 属性时发出警告
Xcode warning if using "assign" attribute for reference types (objects)
当一个人使用 assign
ARC 中的属性:
@property (nonatomic, assign) NSNumber *myNumber;
我把一个long
属性转换成NSNumber
不小心忘了改属性从 assign
到 strong
。
没有编译时警告或错误,运行-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]+ \*
当一个人使用 assign
ARC 中的属性:
@property (nonatomic, assign) NSNumber *myNumber;
我把一个long
属性转换成NSNumber
不小心忘了改属性从 assign
到 strong
。
没有编译时警告或错误,运行-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]+ \*