//最近看到這樣一組宏定義,有了如下理解:
NS_ASSUME_NONNULL_BEGIN
...
NS_ASSUME_NONNULL_END
一蜻展、在這兩個宏之間的代碼坟岔,所有簡單指針都被假定設為非空(nonnull),因此我們只需要去指定那些可為空的(nullable)的指針贬芥,這樣不用麻煩的去將每個屬性或方法都去指定nonnull和nullable来庭,減輕了開發(fā)的工作量靠益。
二丧肴、為了安全起見,蘋果還制定了幾條規(guī)則:
1.typedef定義的類型的nullability(typeof(COREVIDEO_DECLARE_NULLABILITY))特性通常依賴于上下文胧后,即使是在Nonnull組成的這兩個宏定義區(qū)域設置中芋浮,也不能假定它為nonnull。
2.復雜的指針類型(如id *)必須顯示去指定是nonnull還是nullable壳快。例如纸巷,指定一個指向nullable對象的nonnull指針镇草,可以使用”__nullable id * __nonnull”。
3.我們經常使用的NSError **通常是被假定為一個指向可為空的nullable NSError對象的nullable指針瘤旨。