作者yllan (蓝永伦)
看板MacDev
标题[quiz] NSImage's leak
时间Fri Nov 4 14:11:13 2005
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