在xcode7中,ios9的sdk已經全面相容了objective-c的一些新特性和新功能。這些功能都只作用於編譯期,對程式的執行並沒有影響,因此,它可以很好的向下進行相容,無縫的銜接低版本的ios系統,那麼這些特性有什麼樣的用處呢,作為開發者,我保證你一定會愛上他們,如果你可以將這些新特性都應用於你的開發,你的開發效率和**質量,相比之前,會有乙個很大的提公升。
在swift語言中,通過!和?可以將物件宣告成optional,用於在開發中標記這個物件是否可以為空。在oc中,以前是沒有這樣的功能的,因此我們在開發中會經常遇到因為某個函式應該返回例項而返回了空導致的崩潰。nullability的主要用武之地,就是在這裡,它可以起到提示開發者做是否為空得判斷的提示。
開啟xcode7,系統的框架中已經支援了nullability,如下: ?
12
@property (nullable, nonatomic, readonly) objecttype firstobject;
@property (nullable, nonatomic, readonly) objecttype lastobject;
這是nsarray中的兩個屬性,其中nullable關鍵字說明了這裡可能返回空的值。
如果僅僅是在返回值中給開發者一些提示,你可能覺得應用並不大,是的,對開發者最大的幫助是這一特性可以用於函式的引數中,這樣我們在呼叫函式時起到的提示作用,將是非常重要的,越是多人合作的專案,作用也越大。
例如: ?
12
3
-(
void
)setvalue:(nsnumber * _nonnull )number
我們在呼叫函式時,如果傳入了空值,編譯器會給我們警告:
注意:
這一特性在xcode6.3中就已經支援,但在xcode7中又做了一些寫法上的小改動,例如,在xcode6.3中這樣寫: ?
12
3
-(
void
)setvalue:( nonnull nsnumber * )number
而在xcode7中提倡我們使用第一種寫法。
與之相關的幾個關鍵字如下:
修飾引數
nonnull:不可為空
nullable: 可以為空
null_unspecified:不確定是否可以為空(極少情況)
在屬性的宣告中,還會有如下乙個修飾符:
null_resettable:set方法可以為nil,get方法不可返回nil
你可以發現,ios9的sdk中已經完全相容使用了這些特性,並且nonnull的使用會比nullable廣泛的多,因此,系統提供了這樣一對巨集:
#define ns_assume_nonnull_begin _pragma(
"clang assume_nonnull begin")
#define ns_assume_nonnull_end _pragma(
"clang assume_nonnull end")
我們在這對巨集之間定義的變數都會加上nonnull的修飾符,只有我們特殊宣告nullable的才需要手動寫。
幾個有用的Objective C新特性
以前宣告屬性property,都要在類的實現 implementation裡將屬性和成員變數做相應的synthesize,synthesize的含義是將屬性和成員變數做關聯。早期宣告乙個屬性,需要同樣宣告乙個成員變數,然後 synthersize date date 將屬性與成員變數關聯起來,後來可...
Objective C語言特性
1.objective c建立在c語言之上,他是在c語言基礎上新增擴充套件而來能夠建立和操作物件的一門心的設計語言。2.objective c是ansi c的超集,可以混編c和c 3.可以在現存c編譯器基礎上實現,不需要編寫全新的編譯器。在mac系統上編寫objective c一般都使用xcode編...
OBJECTIVE C語言基礎
1.oc語言的特點 objective c,通常寫作objc,oc和較少用的 objective c或obj c,是擴充c的物件導向程式設計語言。objective c是靜態的,強型別定義的語言。只允許單根繼承 cocoa中的根是nsobject 2.常量 程式執行過程中,值不能被改變的量稱為常量。...