使用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 文档已更新,现在是:

所以没有更多的冲突。