Objective-C中nullable、__nullable、_Nullable、_Nonnull的用法

前言

 __nullable 和 __nonnull 。从字面上我们可知, __nullable 表示对象可以是 NULL 或 nil,而__nonnull 表示对象不应该为空。当我们不遵循这一规则时,编译器就会给出警告。在 Xcode 7 中,为了避免与第三方库潜在的冲突,苹果把 __nonnull/__nullable改成 _Nonnull/_Nullable 。再加上苹果同样支持了没有下划线的写法 nonnull/nullable ,于是就造成现在有三种写法这样混乱的局面。但是这三种写法本质上都是互通的,只是放的位置不同,举例如下:


总结:

对于属性、方法返回值、方法参数的修饰,使用:nonnull/nullable;

对于 C 函数的参数、Block 的参数、Block 返回值的修饰,使用:_Nonnull/_Nullable,建议弃用__nonnull/__nullable



example:

@property(copy,nonamatic,nullable)NSString* ID;

- (nullable NSString*)getID;

- (void)setIDS:(nullable NSString*)ID;


- (void)methoeWithBlock:(void(^  _Nullable)()))block;

你可能感兴趣的:(Objective-C中nullable、__nullable、_Nullable、_Nonnull的用法)