CLANG_ANALYZER_NONNULL
(つまり-Xclang nullability
)を使用すると、「 null 以外の値を返すことが期待される関数から 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 のドキュメントが更新され、次のようになりました。
したがって、これ以上の競合はありません。