在iOS开发中,特别是在使用Swift或Objective-C进行编程时,理解并正确使用泛型中的`nullable`、`null_resettable`、`null kindof`关键字至关重要。这些关键字用于明确表示对象是否可以为`nil`,这有助于防止因意外的`nil`指针解引用而导致的运行时错误,提高代码的可读性和安全性。 我们来看`nullable`关键字。`nullable`表明一个对象类型的变量或方法的返回值可能为`nil`。这在你不确定对象是否已初始化或可能在某些情况下变为`nil`时使用。在Objective-C中,`nullable`的书写方式有三种: ```objc // 方式一 @property (nonatomic, strong, nullable) NSString *name; // 方式二 @property (nonatomic, strong) NSString *_Nullable name; // 方式三 @property (nonatomic, strong) NSString *__nullable name; ``` 接着是`nonnull`关键字,它的作用与`nullable`相反,表示一个对象类型变量或方法的返回值绝不会是`nil`。这在你确定对象总是会被初始化且不会变为`nil`时使用。同样,`nonnull`也有三种书写方式: ```objc // 方式一 @property (nonatomic, strong, nonnull) NSString *icon; // 方式二 @property (nonatomic, strong) NSString * _Nonnull icon; // 方式三 @property (nonatomic, strong) NSString * __nonnull icon; ``` 在`NS_ASSUME_NONNULL_BEGIN`和`NS_ASSUME_NONNULL_END`之间的代码段,所有对象默认都被认为是`nonnull`,除非特别声明。 `null_resettable`关键字则用于那些在获取(get)时不应返回`nil`,但在设置(set)时可以接收`nil`的属性。使用`null_resettable`,你需要重写getter和setter以处理`nil`值。例如: ```objc @property (nonatomic, strong, null_resettable) NSString *name; ``` 在这里,如果你尝试通过`name = nil`来设置`name`,那么属性会被设为`nil`,但当你访问`name`时,不会返回`nil`,而是返回一个空字符串或者其他有意义的默认值。 `_Null_unspecified`关键字表示不确定对象是否可以为`nil`。这意味着开发者需要根据具体上下文来判断。它只有一个书写方式: ```objc @property (nonatomic, strong) NSString *_Null_unspecified name; ``` `__kindof`关键字用于泛型中,它表示一个类型可以是当前类或其任何子类。这样在声明方法或属性时,你可以接受该类或其子类的对象。例如: ```objc - (void)acceptObject:(__kindof MyCustomClass *)object; ``` 在这个例子中,`object`可以是`MyCustomClass`实例或其任何子类实例。 正确使用这些关键字可以显著提升代码的健壮性和可维护性。在调用Apple提供的API或编写自己的类时,理解并适当地应用这些特性将帮助避免常见的`nil`指针异常,提高代码质量,并确保应用程序的稳定性。
- 粉丝: 3
- 资源: 903
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助