看板 MacDev 關於我們 聯絡資訊
Cocoa 的記憶體管理不簡單啊~這裡有個小測驗,試試看吧: 先看看底下這段 code,它 allocate/deallocate 了一個 NSData 物件 1000 次。 int i; for (i = 0; i < 1000; i++) { NSData *data= [[NSData alloc] initWithContentsOfFile:@"xxx.jpg"]; [data release]; } 由於我有正確地作好記憶體管理,每次迴圈結束都 [data release] , 因此這段程式跑起來不會有任何問題。 現在把 NSData 換成 NSImage 試試看: int i; for (i = 0; i < 1000; i++) { NSImage *img = [[NSImage alloc] initWithContentsOfFile:@"xxx.jpg"]; [img release]; } 執行程式以後發現記憶體越用越多,用到開始吃 swap ,電腦越來越慢:直到回到 runloop 或是程式結束時,才會一口氣釋放。出了什麼差錯?和 NSData 的範例一 樣,img 都有被 release 了啊!難道 release 並沒有真正 release ?還是哪裡有 memory leak? 詳解: http://yllan.org/wordpress/index.php?p=123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.31.131