在for迴圈建立了很多區域性變數,當遍歷次數過多時造成記憶體急劇增加,崩潰, 可以通過新增@autoreleasepool解決;
eg:for (int i = 0; i < 5000000; i++) {
nsobject *obj = [[nsobject alloc] init]; // 記憶體暴增,區域性變數沒有釋放
解決方案
for (int i = 0; i < 5000000; i++) {
@autoreleasepool {
nsobject *obj = [[nsobject alloc] init]; // 記憶體減少, 執行時間差不多
在乙個for迴圈中,迴圈建立物件。這時候就需要將初始化物件放在@autoreleasepool{}block塊中 這樣可以在每次迴圈結束釋放臨時建立的物件占用的記憶體。
自動釋放池 Autorelease Pools
自動釋放池 autorelease pools 每個執行緒都維護它自己的 nsautoreleasepool 的棧物件。cocoa 希望在每個當前 執行緒的棧裡面有乙個可用的自動釋放池。如果乙個自動釋放池不可用,物件將不會給釋放,從而造成記憶體洩露。對於 的主線程通常它會自動建立並消耗乙個自動釋放池...
自動釋放池autoreleasepool
物件存入到自動釋放池中,當這個池子被銷毀的時候,他都會對池子中的所有的物件進行一次release操作 1 怎麼把物件存到池子中 自動釋放池,大括號代表池子的作用域,可以自己隨意建立 只有在自動釋放池的作用域中呼叫物件的autorelease方法才能夠正確地將物件放入到池子中 autoreleasep...
關於 autoreleasepool的測試及使用
void dosomething nslog finished void dosomething nslog finished 綜上,當需要在程式中建立大量的臨時變數時 大量也可指數量多,不確定,比如從資料庫中讀取資料時 很容易使記憶體產生峰值又回到記憶體低谷,這樣對程式的效能會產生很大影響,而使用...