一、ARC下@property修飾符
strong : 用于OC對象, 相當于MRC中的retain
weak : 用于OC對象, 相當于MRC中的assign
assign : 用于基本數據類型, 跟MRC中的assign一樣
二、ARC中內存管理
只要還有一個強指針變量指向對象,對象就會保持在內存中
1.ARC下單對象內存管理
1)ARC下,所有的指針都是強指針
2)ARC, A對象想擁有B對象, 那么就需要用一個強指針指向B對象
3)A對象不用B對象了, 什么都不需要做, 編譯器會自動幫我們做
2.ARC下多對象內存管理(strong ,weak, assign)
// 在ARC中保存一個對象用strong, 相當于MRC中的retain
@property(nonatomic, strong)Dog *dog;
// 在ARC中如果保存對象不要用assign, 用weak
// assign是專門用于保存基本數據類型的, 如果保存對象用weak
@property(nonatomic, weak)Person *owner;
3.ARC循環引用問題
ARC和MRC一樣, 如果A擁有B, B也擁有A, 那么必須一方使用弱指針
也就是說 一端用strong ,一端用weak
4.ARC的原理
當ARC開啟時,編譯器將自動在代碼合適的地方插入retain, release和autorelease,而作為程序猿,完全不需要擔心編譯器會做錯(除非開發者自己錯用ARC了)。
5.ARC優點
完全消除了手動管理內存的煩瑣, 讓程序猿更加專注于app的業務
基本上能夠避免內存泄露
有時還能更加快速,因為編譯器還可以執行某些優化
三、ARC和MRC混編
1.ARC模式下如何兼容非ARC的類?
答:找到project->targets->Bulid Phases->Compiles Sources->找到相關文件右擊右邊Compiler Flags添加相關代碼
給相關文件添加一端代碼,
轉變為非ARC -fno-objc-arc
轉變為ARC的, -f-objc-arc (不常用)
四、如何操作Xcode將MRC轉ARC?
答:Edit->Convert->To Objective ARC