1. 程式人生 > >iOS新增關鍵字 nonnull、nullable等相關

iOS新增關鍵字 nonnull、nullable等相關

否則 使用 指針 -a sof 編譯 mac 指針類型 apple

1,nonnull和nullable 聲明屬性是否可以為nil,如果對nonnull屬性賦值為nil,則會報警告。
1
2
3
@property (nonatomic, strong, nonnull) NSArray *array1;

@property (nonatomic, strong) NSArray * __nullable array2;
作用主要是開發者之間交互,調用屬性時可以知道這個屬性是可能為nil的,針對這個狀態做些處理。 默認情況下就是nullable狀態。 可以用來給方法的參數最要求,比如定一個方法,參數為一個不為空的對象: 2,null_resettable
聲明屬性set方法可以為nil,但是get一定不能為nil,這裏有一個貌似沖突的地方,就是可以定義個屬性為nil,但是在獲取這個屬性的時候,這個屬性不能為nil,否則會有警告。 這裏用到的地方例如在UIViewController中的view,意味著開發者可以對控制器的view清空賦值為nil,但是控制器view是懶加載的,每次獲取控制器的view時候,都可以再獲取到非nil的view。 一個Objective-C的新特性:nullability annotations。這一新特性的核心是兩個新的類型註釋:__nullable__nonnull從字面上我們可以猜到,__nullable表示對象可以是NULL或nil,而__nonnull表示對象不應該為空。當我們不遵循這一規則時,編譯器就會給出警告。
不過這只是一個警告,程序還是能編譯通過並運行。 事實上,在任何可以使用const關鍵字的地方都可以使用__nullable和__nonnull,不過這兩個關鍵字僅限於使用在指針類型上。而在方法的聲明中,我們還可以使用不帶下劃線的nullable和nonnull

iOS新增關鍵字 nonnull、nullable等相關