iOS9新特性關鍵詞
阿新 • • 發佈:2019-01-14
nonnull
1、作用:表示不能為空
2、用法:
(1)屬性
nonnull 宣告的屬性不能為空(getter方法和setter方法都有)
@property (nonnull, nonatomic, copy) NSString *name; //寫法一
@property (nonatomic, copy) NSString *__nonnull name; //寫法二,小寫時為兩個下劃線
@property (nonatomic, copy) NSString *_Nonnull name; //寫法三,大寫時為一個下劃線
這裡需要注意一個問題:
person.name = nil;//系統會有警告不能給這個屬性賦nil NSString *string = nil; [person setName:string];//這裡系統不會識別到
每個屬性都要寫關鍵字很麻煩,可以用下面的方法
NS_ASSUME_NONNULL_BEGIN
@interface ViewController : UIViewController
@property (nonatomic, weak) UILabel *label;
@property (nonatomic, weak) UIButton * __nullable button;
@property (null_resettable, nonatomic, strong) NSArray *friends;
@end
NS_ASSUME_NONNULL_END
在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之間,定義的所有物件屬性和方法預設都是nonnull
NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END 要成對出現,不然報錯
一般用於標頭檔案.h 將宣告包含起來針對所有屬性新增 nonnull 修飾
也就是說, 除了nullable和null_resetable需要加修飾, 其他都不需要加修飾
(2)引數
系統提示該方法的引數不能為空
[array addObject:(nonnull NSString *)];
[array addObject:(NSString * __nonnull)];
[array addObject:(NSString * _Nonnull)];
nullable
1、作用:表示可以為空
2、舉例說明:
(1)屬性
nullable 宣告的屬性可以為空
@property (nullable, nonatomic, copy) NSString *gender; //寫法一
@property (nonatomic, copy) NSString * __nullable gender; //寫法二,小寫時為兩個下劃線
@property (nonatomic, strong) NSString * _Nullable gender; //寫法三,大寫時為一個下劃線
(2)引數
[person setGender:(NSString * _Nullable)];
[person setGender:(NSString * __nullable)];
[person setGender:(NSString * _Nullable)];
null_resettable
1、作用:setter可為空, getter不可為空
setter方法是nullable(可以賦空值),getter方法是nonnull(取值不能為空)
2、用法:
(1)屬性
用null_resettable來修飾屬性,表示這個屬性的初始化採用了懶載入方式
@property(null_resettable, nonatomic, strong) UIView *view;