NS_ASSUME_NONNULL_BEGIN
是 Objective-C 语言中的一个宏定义,用于指示编译器假设该宏之后的所有指针类型默认都是非空(nonnull)的。这个宏通常与 NS_ASSUME_NONNULL_END
成对使用,以定义一个作用域,在这个作用域内的所有指针默认都是非空的。
在 Objective-C 中,指针可以是空(nil)或非空。为了避免空指针异常,开发者通常需要在代码中显式地检查指针是否为空。NS_ASSUME_NONNULL_BEGIN
和 NS_ASSUME_NONNULL_END
宏提供了一种简化这一过程的方式。
nonnull
关键字。这个宏没有具体的类型,它是一个编译时的指示符,用于改变编译器对指针类型的默认假设。
如果在 NS_ASSUME_NONNULL_BEGIN
和 NS_ASSUME_NONNULL_END
宏之间错误地赋值了一个空指针,编译器可能会发出警告或错误。
nullable
关键字:如果确实需要一个可以为空的指针,可以在声明时显式地使用 nullable
关键字。NS_ASSUME_NONNULL_BEGIN
@interface MyClass : NSObject
@property (nonatomic, strong) NSString *name; // 默认是非空
@end
@implementation MyClass
- (void)setName:(NSString *)name {
_name = name; // 这里不需要检查 name 是否为 nil
}
@end
NS_ASSUME_NONNULL_END
在这个例子中,MyClass
的 name
属性默认是非空的,因此在 setName:
方法中不需要检查传入的 name
参数是否为 nil
。
通过这种方式,开发者可以更高效地编写和维护 Objective-C 代码,同时减少潜在的空指针问题。
领取专属 10元无门槛券
手把手带您无忧上云