最近开是作新项目,准备尝试使用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如何使用?