ios 9.0之后 添加的关键字

在iOS9.0 之后添加了一些新的关键字, 在这里复习一下, 顺便做个总结, 以便于让自己的代码更加规范。

常用关键字:

1. nonnull \ __nonnull :这个属性 代表setter 和 getter 都不能为nil 
使用方法:
@property (nonatomic, strong, nonnull) NSArray *names;
@property (nonatomic, strong) NSArray * __nonnull names;

2. nullable \ __nullable :这个属性代表 setter 和 getter 都可以为nil
使用方法:
@property (nonatomic, strong, nullable) NSArray *names;
@property (nonatomic, strong) NSArray * __nullable names; 
温馨提示:
默认情况下 属性不加nullable, setter 和 getter 也都是可以为nil,加上nullable 更多的作用在于程序员之间的沟通交流(提醒同事某个属性可能是nil)

3.null_resettable : setter可以为nil, getter不可以为nil
@property (null_resettable, nonatomic, strong) NSArray *names;

4.NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之间的所有属性默认都是nonnull

泛型:

1. 常用的泛型 标明数组中装的东西, 便于使用
   @property (nonatomic, strong) NSMutableArray *names;
   @property (nonatomic, strong) NSMutableDictionary *books; 

2.自定义泛型
   Bag *bag1 = [[Bag alloc] init];
  [bag1 get:0];    
  Bag *bag2 = [[Bag alloc] init];
  [bag2 get:0];
  另外一个类写法:
@interface Bag<__contravariant ObjectType> : NSObject
 - (void)add:(ObjectType)object;
 - (ObjectType)get:(int)index;
@end

3. 
__covariant : 小类型(泛型类的子类类型) -> 大类型(泛型类的父类类型) 时, 不会报⚠️
__contravariant : 大类型(泛型类的父类类型) -> 小类型(泛型类的子类类型)时, 不会报⚠️

__kindof

 1. 一个方法中 返回参数中修饰符添加 __kindof 
 目的是:告诉编译器返回值可能是一个类(NSString),也可能是这个类的子类(NSMutableString)这样在调用时, 不用进行强制转换

你可能感兴趣的:(ios 9.0之后 添加的关键字)