淺析nonnull和nullable


title: 淺析nonnull和nullable
date: 2016-11-17 14:59:50
categories:

  • iOS_SHAKALAKA
    tags:
  • iOS
  • nonnull
  • nullable

淺析nonnull和nullable

為了對應(yīng)Swift中的optionalnon-optional,Xcode6.3推出了一個新特性,就是 nullablenonnull

簡單來講,nullable 表示對象可以是NULL或nil,nonnull 表示對象不可以為空,當(dāng)我們不遵循上述規(guī)則時,編譯器就會警告。

下面簡單示范一下這兩個東西的用法!

聲明屬性有兩種寫法。

第一種寫法

@property (nonatomic, copy, nullalbe) NSString *name;
@property (nonatomic, strong, nonnull) UITableView *tableView;

第二種寫法

@property (nonatomic, copy) NSString * __nullabel name;
@property (nonatomic, strong) UITableView * __nonnull tableView;

個人推薦第一種寫法,簡單清晰明了。

聲明方法的參數(shù)也有兩種寫法

第一種寫法:

- (instancetype)initWithName:(nonnull NSString *)name;
- (instancetype)initWithName:(nullable NSString *)name;

第二種寫法:

- (instancetype)initWithName:(_Nonnull NSString *)name;
- (instancetype)initWithName:(_Nullable NSString *)name;

當(dāng)然,試想一下如果每一個參數(shù)都需要指定 _nullable 或者 _nonnull,未免不是太麻煩了么!好在蘋果給我們提供了一對宏定義: NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END

基本用法如下:

NS_ASSUME_NONNULL_BEGIN

@interface DemoVC_1 : UIViewController

//需要指定 nullable
@property (nonatomic, copy, nullable) NSString *name;

//NS_ASSUME_NONNULL_BEGIN 和 NS_ASSUME_NONNULL_END 之間,此處 ID 沒有指定則默認(rèn)為 nonnull
- (instancetype)initWithID:(NSString *)ID;

@end

NS_ASSUME_NONNULL_END

總結(jié)

其實(shí)很早以前就看見別人用這兩個小玩意了,因?yàn)閼芯蜎]去仔細(xì)研究,導(dǎo)致一直沒弄明白,今天又看見了,一臉尷尬。。優(yōu)秀的開發(fā)者總是時刻追隨技術(shù)最前沿,擁抱變化,接收新鮮事物,希望自己在以后的開發(fā)中能夠親身踐行,加油!

博主原創(chuàng),轉(zhuǎn)載請注明出處,不勝感激

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容