[quiz] NSImage's leak
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
討論串 (同標題文章)
完整討論串 (本文為第 1 之 11 篇):