iOS-《編寫高質量程式碼》筆記第三章-記憶體管理

道明白發表於2017-12-09

建議17:理解記憶體和Objective-C記憶體管理規則

OC 記憶體管理模式基於物件的“所有權”上。任何物件都會被一個或多個使用者引用,只要物件還有一個使用者,該物件就應該繼續存在。如果一個物件沒有使用者了,系統將自動銷燬它。

建議18:記憶體管理講究“好借好還,再借不難”

在返回一個新建立的(擁有的)物件時,應該使用autorelease而不是release來釋放所有權。

建議19:區別開alloc 、init、retain、release、和dealloc 之間的差異

OC 中沒有new和delete 兩個關鍵字,new可以作為一個函式,也就是alloc + init 。 

alloc分配過程不僅進行物件的記憶體分配,而且還初始化物件的兩個非常重要屬性,即它的isa例項變數和保持數(引用計數) 。它還將所有的剩下的例項變數設定為0。但是分配完成的物件還是不可用,還需要呼叫像init這樣的初始化方法來進行物件自有的初始化,才能返回一個可用的物件。

建議20:優先使用存取方法來簡化記憶體管理

使用存取方法(getter ,setter)管理記憶體,可大大降低管理方面出現的問題。

建議21:物件銷燬或者移除一定考慮所有權的釋放

從集合中移除物件,集合要釋放對被移除物件的所有權。(自動釋放)

建議22:明智而審慎地使用dealloc

dealloc 的角色就是釋放物件佔用的記憶體並處理自己所擁有的資源,包括本身變數的釋放。

不要嘗試用dealloc管理系統資源。應用程式終止時,物件的dealloc可能不會被呼叫。因為程式的記憶體是自動清除退出,讓作業系統清理資源比呼叫所有的記憶體管理方法更有效率。


相關文章