nullable/_Nullable/__nullable
nullable修饰属性,表示属性可为空,可将属值赋为nil。
声明一个属性值是可为空的,有如下三种方式:
@property (nonatomic, strong, nullable) NSString *nullableString;
@property (nonatomic, strong ) NSString * _Nullable nullableString1;
@property (nonatomic, strong ) NSString * __nullable nullableString2;
nonnull/_Nonnull/__nonnull
- nonnull修饰属性,表示该属性不可为空,不能将属性值赋nil,赋nil系统就会报警高。
- 同样的声明一个属性不可为空也同理。
__kindof
- __kindof修饰,表示是该类或者该类的子类
//声明一个数组,该数组里只能是字符串类型的数据
NSArray <NSString *> *stringArray = @[@"字符串1",@"字符串2"];
__kindof被广泛使用在数组、字典等,例如:
//声明一个数组,该数组中只能是,是UIGestureRecognizer类或者其子类对象
@property(nonatomic, readonly) NSArray<__kindof UIGestureRecognizer *> *gestureRecognizers;
例如系统tableView方法
- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;
- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;
- (nullable __kindof UITableViewHeaderFooterView *)dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifier;
instancetype 能自动识别当前类的对象,id不能
- id是一个指向OC对象的指针。
- instancetype指向的是当前类的对象。
例如:
//返回当前类的一个对象
- (instancetype)init {
if (self = [super init]) {
}
return self;
}