Objective C進化特性

2021-09-19 04:52:56 字數 2632 閱讀 1081

[toc]

毫無疑問,objective-c (下稱objc)在誕生三十年後,因為ios系統在移動裝置領域的制霸,迎來了近五年來一年一波的進化,這些新特性表明objc這個年事已高的語言,仍在一步一步追逐現代程式語言的步伐。

自動引用計數技術,簡稱arc,是objective-c的一項重要進化。編譯器在編譯過程中,自動分析**,為物件新增release、retain、dealloc呼叫,大大減少開發中的記憶體管理**,減少了工程師將近三分之一的工作負擔,並且更加安全穩定。

如今的xcode工程,都自動開啟了arc模式,在這種模式下,工程師不可以手動呼叫release、retain、dealloc、autoreloease等函式,但工程師還是可以靈活處理。

例如:

@property (nonatomic, strong) nsarray* datas;

...//某處

self.datas = nil; //編譯器會自動在這據句呼叫前執行 [self.datas release];

...

在例如:

@autoreleasepool
當然,任何objc的方法,每一對大括號都是自帶自動釋放池的,不是特殊需要不用特別地使用@autoreleasepool

這個的翻譯一直很難確定,可以認為是一種簡寫。

不使用literals特性時我們這樣寫:

nsarray *myarray = [nsarray arraywithobjects:object1,object2,object3,nil];

nsdictionary *mydictionary1 = [nsdictionary dictionarywithobject:someobject forkey:@"key"];

nsdictionary *mydictionary2 = [nsdictionary dictionarywithobjectsandkeys:object1, key1, object2, key2, nil];

nsnumber *mynumber = [nsnumber numberwithint:myint];

nsnumber *mysumnumber= [nsnumber numberwithint:(2 + 3)];

nsnumber *myboolnumber = [nsnumber numberwithbool:yes];

使用literals特性,就可以簡寫了:

nsarray *myarray = @[ object1, object2, object3 ];

nsdictionary *mydictionary1 = @;

nsdictionary *mydictionary2 = @;

nsnumber *mynumber = @(myint);

nsnumber *mysumnumber = @(2+3);

nsnumber *myboolnumber = @yes;

nsnumber *myintegernumber = @8;

讓基本資料物件,操作起來更便捷,就是一大進步。

同樣舉例比對,首先是不使用subscripting特性

id object1 = [somearray objectatindex:0];

id object2 = [somedictionary objectforkey:@"key"];

[somemutablearray replaceobjectatindex:0 withobject:object3];

[somemutabledictionary setobject:object4 forkey:@"key"];

然後是用了subscripting特性

id object1 = somearray[0];

id object2 = somedictionary[@"key"];

somemutablearray[0] = object3;

somemutabledictionary[@"key"] = object4;

一目了然,更接近現代程式語言的風格。

ios4引入的block特性,看看下面的例子,關於閉包的詳細我們將單獨寫一篇文章進行講解。

#include #include typedef int (^intblock)();

intblock makecounter(int start, int increment) );

}int main(void)

/* output:

first call: 5

second call: 7

third call: 9

*/

//單執行緒阻塞

- (ibaction)analyzedocument:(nsbutton *)sender
//多執行緒非同步等待,資料載入完畢後,主線程渲染。

- (ibaction)analyzedocument:(nsbutton *)sender );

});}

Objective C語言特性

1.objective c建立在c語言之上,他是在c語言基礎上新增擴充套件而來能夠建立和操作物件的一門心的設計語言。2.objective c是ansi c的超集,可以混編c和c 3.可以在現存c編譯器基礎上實現,不需要編寫全新的編譯器。在mac系統上編寫objective c一般都使用xcode編...

深入Objective C的動態特性

目錄 動態語言基礎 深入執行時 objective c有相當多的動態特性,基本上也是最常用的有動態型別 dynamic typing 動態繫結 dynamic binding 和動態載入 dynamic loading 這些都是在cocoa程式開發中非常常用的語言特性,在此之後oc底層也提供了相當豐...

Objective C中的屬性特性

assign 用於基本資料型別,直接賦值。也可以用於物件,只不過當setter方法賦值時,只是簡單儲存位址,不會造成引用計數的改變,可以解決迴圈引用問題。retain 用於物件型別,當賦值時,先將舊值釋放,對新值retain引用計數加1 copy 用於物件型別,根據實現的nscopying協議的co...