autorelease 自動釋放池 autorelease是一種支持引用計數的記憶體管理方式,只要給對象發送一條autorelease消息,會將對象放到一個自動釋放池中,當自動釋放池被銷毀時,會對池子裡面的所有對象做一次release操作 優點:不用再關心對象釋放的時間,不用再關心什麼時候調用rele ...
autorelease 自動釋放池
autorelease是一種支持引用計數的記憶體管理方式,只要給對象發送一條autorelease消息,會將對象放到一個自動釋放池中,當自動釋放池被銷毀時,會對池子裡面的所有對象做一次release操作
優點:不用再關心對象釋放的時間,不用再關心什麼時候調用release
原理:autorelease實際上只是把對release的調用延遲了,對於每一個autorelease,系統只是把該 Object放入了當前的autorelease pool中,當該pool被釋放時,該pool中的所有Object會被調用Release。
註:
(1)在自動釋放池中創建了對象, 一定要調用autorelease,才會將對象放入自動釋放池中(也可以不在自動釋放池中創建,但必須在自動釋放池中調用autorelease)
(2)一個程式中可以創建N個自動釋放池, 並且自動釋放池還可以嵌套
(3)不要再自動釋放池中使用比較消耗記憶體的對象, 占用記憶體比較大的對象
(4)儘量不要再自動釋放池中使用迴圈, 特別是迴圈的次數非常多, 並且還非常占用記憶體
(5)千萬不要寫多次autorelease
(6)一個alloc/new對應一個autorelease或者release
存儲形式: 如果存在多個自動釋放池的時候, 自動釋放池是以 “棧” 的形式存儲在堆區
棧的特點: 先進後出