oc的垃圾回收與ARC
ARC介于自動(dòng)垃圾回收(GC)和手動(dòng)內(nèi)存管理之間。就像垃圾回收,ARC讓程序員不再需要書寫retain/release/autorelease語(yǔ)句。但它又不同于垃圾回收,ARC無法處理retaincycles。在ARC里,如果兩個(gè)對(duì)象互相強(qiáng)引用(strong references)將導(dǎo)致它們永遠(yuǎn)不會(huì)被釋放,甚至沒有任何對(duì)象引用它們。
因此,盡管ARC能免去程序員大部分內(nèi)存管理問題,但仍然要程序員自己避免retaincycles或手動(dòng)打斷對(duì)象之間的retain循環(huán)。
ARC和蘋果的垃圾回收之間還有一個(gè)重要的不同:ARC不是強(qiáng)制的。而對(duì)于蘋果的垃圾回收,要么整個(gè)程序都使用,要么都不用。也就是說在app中的所有O-C代碼,包括所有的蘋果框架和所有的第3方庫(kù)必須支持垃圾回收,才能使用垃圾回收。相反,ARC和非ARC代碼可以在一個(gè)app中和平共處。這使得將項(xiàng)目可以零星地遷移到ARC 而不會(huì)像垃圾回收起初遇到的各種兼容性和穩(wěn)定性的問題。
java的垃圾回收與oc的ARC:
1.GC?of java is Runtime, while?ARC?is compile time.(GC是java運(yùn)行時(shí),而ARC是編譯時(shí)。)
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引用的對(duì)象在運(yùn)行時(shí),檢查運(yùn)行時(shí)對(duì)象的依賴項(xiàng)。而ARC在編譯時(shí)間 添加調(diào)用release, retain, autorelease)