oc的垃圾回收與ARC
ARC介于自動垃圾回收(GC)和手動內(nèi)存管理之間。就像垃圾回收您宪,ARC讓程序員不再需要書寫retain/release/autorelease語句。但它又不同于垃圾回收,ARC無法處理retaincycles皆怕。在ARC里,如果兩個對象互相強引用(strong references)將導(dǎo)致它們永遠不會被釋放西篓,甚至沒有任何對象引用它們愈腾。
因此,盡管ARC能免去程序員大部分內(nèi)存管理問題岂津,但仍然要程序員自己避免retaincycles或手動打斷對象之間的retain循環(huán)虱黄。
ARC和蘋果的垃圾回收之間還有一個重要的不同:ARC不是強制的。而對于蘋果的垃圾回收吮成,要么整個程序都使用橱乱,要么都不用。也就是說在app中的所有O-C代碼粱甫,包括所有的蘋果框架和所有的第3方庫必須支持垃圾回收泳叠,才能使用垃圾回收。相反茶宵,ARC和非ARC代碼可以在一個app中和平共處危纫。這使得將項目可以零星地遷移到ARC 而不會像垃圾回收起初遇到的各種兼容性和穩(wěn)定性的問題。
java的垃圾回收與oc的ARC:
1.GC?of java is Runtime, while?ARC?is compile time.(GC是java運行時,而ARC是編譯時乌庶。)
2.GC?has reference to the objects at runtime and check for the dependencies of object runtime. While?ARC?appends the release, retain, autorelease calls at compiletime.(GC引用的對象在運行時,檢查運行時對象的依賴項种蝶。而ARC在編譯時間 添加調(diào)用release, retain, autorelease)