最近開是作新項目,準備嘗試使用ARC,記錄遇到的一些問題。html
ARC是編譯器特性,因此要求Xcode的最低版本爲4.2,iOS4以上(注意weak是ios4以上纔有的,ios4中只能使用__unsafe_unretained)。ios
ARC的規則:app
NSAllocateObject
和 NSDeallocateObject 都不能使用(從沒用過)
autoreleasepool
blocks來代替,比NSAutoreleasePool具備更高的效率(Why?)注意:ide
在ARC使用屬性時,不能使用new作前綴(應該是ARC在編譯器階段會爲屬性方法自動添加new作前綴)ui
ARC新增幾個對象生命週期限定符spa
__strong強引用,系統不會釋放指向強引用的對象,相似retain指針
__weak弱引用,相似assign,區別是當被引用的對象銷燬時,引用對象會被自動置空code
__unsafe_unretained與__weak相似,惟一區別是當被引用對象銷燬時,它不會被自動置空,所以可能會成爲野指針htm
__autoreleasing用來傳遞引用參數,返回時會自動的釋放對象
使用編譯器標識激活ARC:-fobjc-arc
禁止ARC:-fno-objc-arc
能夠使用下面宏來兼容ARC和非ARC下的屬性聲明
#ifndef MB_STRONG #if __has_feature(objc_arc) #define MB_STRONG strong #else #define MB_STRONG retain #endif #endif #ifndef MB_WEAK #if __has_feature(objc_arc_weak) #define MB_WEAK weak #elif __has_feature(objc_arc) #define MB_WEAK unsafe_unretained #else #define MB_WEAK assign #endif #endif
ARC下Block如何使用?