1. 程式人生 > >iOS9新特性關鍵詞

iOS9新特性關鍵詞

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;