1.ARC
當你自己調用了release或retain語句的時候,ARC有效時編譯文件會遇到錯誤,你可以通過-fno-objc-arc和-fobjc-arc兩個編譯器標志在混搭中支持ARC和非ARC的代碼
如下面編譯支持ARC,而文件代碼不支持ARC
# if !__has_feature(objc_arc)//this code do not support to ARC-(void) release{//release your var}#endif
在ARC工程中集成非ARC的第三方代碼:當使用沒有通過ARC編譯的第三方框架時,編譯庫里面的文件需要使用-fno-objc-arc編譯開關。Edit->Refactor->convert to Object-c ARC
在非ARC工程中集成ARC代碼時:不會遇到編譯錯誤,但可能會面臨內存泄露,為避免此類事情的發生,需要使用-fobjc-arc來標記這些通過ARC編譯的第三方代碼
2.框架中的ARC
1)歸零弱引用
弱一用通過持有指針而不關注引用計數的值來避免循環保留,但是當內存(指針指向內存)被銷毀后,弱引用指向將是無效內容。銷毀內存后在訪問指針會導致應用崩潰,歸零引用在銷毀內存后將指針歸零的方法來解決問題。
2)所有權修飾符
ARC會自動幫我們插入retain和release但是我們需要給它一些提示來銷毀已分配內存的準確時機,這些提示就是所有權修飾符
前三個可用于屬性的聲明,屬性聲明不需要雙下劃線,默認的所有權修飾符是__strong
因為__strong是默認的,所以使用
@PRoperty (nonatomic,strong) NSString *someString;//等同@property (nonatomic) NSString *someString;
__strong 等同retain。
新聞熱點
疑難解答