iOS9的幾個新關鍵字(nonnull、nullable、null_resettable、__null_unspecified)

一、nonnull:字面意思就能知道:不能爲空(用來修飾屬性,或者方法的參數,方法的返回值)

代碼:程序員

 
 1 //三種使用方式均可以  2 @property (nonatomic, copy, nonnull) NSString *name;  3  4 @property (nonatomic, copy) NSString * _Nonnull name;  5  6 @property (nonatomic, copy) NSString * __nonnull name;  7  8 //補充(不適用於assign屬性,由於它是專門用來修飾指針的)  9 @property (nonatomic, assign) NSUInteger age; 10 11 //補充(用下面宏包裹起來的屬性所有都具nonnull特徵,固然,若是其中某個屬性你不但願有這個特徵,也能夠本身定義,好比加個nullable) 12 //在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之間,定義的全部對象屬性和方法默認都是nonnull
 

 

1 //也能夠在定義方法的時候使用 2 //返回值和參數都不能爲空 3 - (nonnull NSString *)test:(nonnull NSString *)name; 4 //同上 5 - (NSString * _Nonnull)test1:(NSString * _Nonnull)name;

 這樣,你在使用以上方法的時候會出現這種效果提示編程

一樣,使用屬性的時候:atom

 

二、nullable:表示能夠爲空(使用方法和上面幾乎同樣,可是沒有發現和上面相似的宏)

代碼(大概看一下,參考上面就好了):spa

 
1 //三種使用方式 2 // 方式一: 3 @property (nonatomic, copy, nullable) NSString *name; 4 // 方式二: 5 @property (nonatomic, copy) NSString *_Nullable name; 6 // 方式三: 7 @property (nonatomic, copy) NSString *__nullable name;
 

效果:3d

這樣,當在使用這個屬性的時候,Xcode的代碼提示會告訴你這個屬性是能夠爲空的,算是一種編程規範吧,減小程序員之間的交流。指針

 三、null_resettable: get:不能返回空, set能夠爲空(注意:若是使用null_resettable,必須 重寫get方法或者set方法,處理傳遞的值爲空的狀況)

 // 書寫方式:code

 1 @property (nonatomic, copy, null_resettable) NSString *name; 對象

設置一下set或get方法blog

 
 1 - (void)setName:(NSString *)name  2 {  3 if (name == nil) {  4 name = @"我叫暢敏";  5  }  6 _name = name;  7 }  8 - (NSString *)name  9 { 10 if (_name == nil) { 11 _name = @"我叫暢敏"; 12  } 13 return _name; 14 }
 

四、_Null_unspecified:不肯定是否爲空

使用方式只有這兩種:ci

1 @property (nonatomic, strong) NSString *_Null_unspecified name;

1 @property (nonatomic, strong) NSString *__null_unspecified name; 

 

總結:我理解這些東西主要就是爲了提升開發規範,提示使用的人應該傳什麼樣的值,若是違反了對規範值的要求,就會有警告;

相關文章
相關標籤/搜索