再續 Xcode 4.2 中的Automatic Reference Counting (ARC)

上一篇轉載文章中,提到了id--void*類型不能隱形轉換,需要顯性調用.但是文章中都沒有說怎麼顯性轉換.

一下午找了N多文檔,試驗了N多次.找到了正確的調用,可是就是編譯不過去,剛剛在apple Developper Forums中看到了類似情況.才知道是xcode4.2的版本沒有跟上.造成的某些宏找不到,編譯報錯.

現在說下ARC開啓時,id和void*顯性轉換.

id objc_unretainedObject(CFTypeRef cf);   (void * ==> id,無需單獨release)

 id objc_retainedObject(CFTypeRef cf);  (void * ==> id,需單獨release,或使用__weak,如不釋放可能造成leak)

CFTypeRef objc_unretainedPointer(id obj); (id ==> void *,CFTypeRef只是obj的一個引用.)

ARC開啓時,coreFoundation Type和Foundation類顯性轉換.(也就是cf type和ns類的轉換)

在沒有開啓ARC時,可以進行強制轉換.

在這裏引入了3個宏,和__strong,__weak用法一樣的(用時放的位置).

__bridge,__bridge_retain,__bridge_transfer,這主要是cf和ns轉換用.

__bridge,ARC沒有進行retain操作

__bridge_retain,ARC進行retain操作

__bridge_transfer,ARC在操作結束後,進行release操作.類似__weak吧.

看文檔說不建議用後2個..容易搞的混淆了..


id my_id;

CFStringRef my_cfref;

NSString *a = (__bridge NSString*)my_cfref;

CFStringRef b = (__bridge CFStringRef)my_id;


英文好的自己看下蘋果官方文檔

這是一個概括瞭解ARC的網站

LLVM關於ARC的介紹.個人感覺比apple的有用,詳細

蘋果官方文檔pdf版(附件是pdf的,但是論壇有格式限制.就改成gif的了,圖片另存爲再改名就好了)


發佈了30 篇原創文章 · 獲贊 6 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章