Objective-Cのnullable、_nullable、__Nullable

1871 ワード

nullable、__nullable、_Nullableは、オブジェクトがNULLまたはnilであることを示します.
nonnull、__nonnull、_Nonnullは、オブジェクトが空であるべきではないことを示します.
これらはObective-C特性Nullability Annotationsであり、符号化時にこの規則に従わない場合、コンパイラは警告します.3つの表示作用は同じで、使用時の位置に差があります.例を次に示します.
メソッドは、値の修飾を返します.
- (nullable id)method;
- (id __nullable)method;
- (id _Nullable)method;

属性の修飾を宣言
@property (nonatomic, strong, nullable) id obj;
@property (nonatomic, strong) id __nullable obj;
@property (nonatomic, strong) id _Nullable obj;

メソッドパラメータの修飾
- (void)methodWithObject:(nullable id)obj;
- (void)methodWithObject:(id _Nullable)obj;
- (void)methodWithObject:(id __nullable)obj;

ダブルポインタタイプのオブジェクト、Blockの戻り値、Blockのパラメータなどは使用する必要があります_nullable、__Nullableまたは_nonnull、__Nonnull.
ダブルポインタタイプのパラメータ
- (void)methodWithError:(NSError * _Nullable * _Nullable)error
- (void)methodWithError:(NSError * __nullable * __nullable)error

blockのコスメティック
次の例ではnullable、を使用します.nullable、_Nullable修飾blockは、methodWithBlockのパラメータが空のblockであることを示す.
- (void)methodWithBlock:(nullable void (^)())block; 
- (void)methodWithBlock:(void (^ _Nullable)())block;
- (void)methodWithBlock:(void (^ __nullable)())block;

blockのパラメータと戻り値
- (void)methodWithBlock:(nullable id __nonnull (^)(id __nullable params))block;
- (void)methodWithBlock:(id __nonnull (^ __nullable)(id __nullable params))block;
- (void)methodWithBlock:(id _Nonnull (^ _Nullable)(id _Nullable params))block;

これらを手動で書くたびに面倒なので、新しいファイルをデフォルトでNS_を追加します.ASSUME_NONNULL_BEGINとNS_ASSUME_NONNULL_ENDの2つのマクロは、マクロ間のコードがnonnullであることを示し、nullableがポインタオブジェクトであれば、私たちは単独で表示します.
NS_ASSUME_NONNULL_BEGIN

@interface TestClass ()

- (void)methodWithObject:(nullable id)obj;

@end

NS_ASSUME_NONNULL_END