讀古今文學網 > iOS編程基礎:Swift、Xcode和Cocoa入門指南 > 12.3 ARC及其作用 >

12.3 ARC及其作用

曾幾何時,保持與釋放對象是你自己的事情,程序員需要向對像發送retain與release消息。NSObject還實現了retain與release,不過在ARC下(以及在Swift中),你不能再調用它們了。這是因為ARC會替你調用!這是ARC的職責:幫你完成本應該由程序員自己完成的內存管理工作。

ARC是編譯器的一部分。編譯器會在背後插入retain與release調用來修改你的代碼。比如,當通過調用某個方法接收到了一個引用類型的對象時,ARC會立刻保持它,這樣在代碼運行時對象就會一直存在;當代碼執行完畢時,ARC就會釋放對象。與之類似,在創建或複製一個引用類型的對象時,ARC會增加其保持計數,當代碼執行完畢時會釋放它。

ARC很保守,但卻非常精確。實際上,ARC會在每個結合處保持計數(可能很多人並沒有注意到這裡也需要進行內存管理):當接收到對像作為參數時它會保持計數、在將對像賦給變量時它會保持計數,諸如此類。它甚至還會在背後插入臨時變量,使其能夠盡早指向對象,從而可以保持它。當然,最終它還會釋放以與保持相匹配。