使用CLANG_ANALYZER_NONNULL
(ie -Xclang nullability
),我得到“从预期返回非空值的函数返回 Null ”:
使用 Xcode 7.3 和 iOS 9.3 文档,我检查initWithFrame:
并返回nil
:
但是 UIView.h 用 封装了所有东西NS_ASSUME_NONNULL_BEGIN
,所以我们可以解释如下:
作为:
- (nonnull instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
所以文档解释它是nullable
,而头文件说它是nonnull
. 相信哪一个?
我应该写:
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (!self) {
// workaround for clang analyzer
return (void * _Nonnull)nil;
}
// Initialization code
return self;
}
或者:
- (nonnull instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
// Initialization code
return self;
}
更新
Xcode 文档已更新,现在是:
所以没有更多的冲突。