下面的代码循环不会泄漏内存(通过观察它在无限循环下“top”)来验证;objc泄漏行为我无法解释
NSBitmapImageRep *this_bmap = 0;
while (1) {
CGImageRef windowImage =
CGWindowListCreateImage(CGRectNull,
kCGWindowListOptionIncludingWindow,
windowID, kCGWindowImageDefault);
this_bmap = [[NSBitmapImageRep alloc] initWithCGImage:windowImage];
[this_bmap release];
CGImageRelease(windowImage);
}
我不会期待它。然而,当我复制一个指针位图数据,像这样:
NSBitmapImageRep *this_bmap = 0;
while (1) {
CGImageRef windowImage =
CGWindowListCreateImage(CGRectNull,
kCGWindowListOptionIncludingWindow,
windowID, kCGWindowImageDefault);
this_bmap = [[NSBitmapImageRep alloc] initWithCGImage:windowImage];
void *pixels1 = [this_bmap bitmapData];
[this_bmap release];
CGImageRelease(windowImage);
}
这现在泄漏像疯了似的。我可以看到这种情况在“最高层”下迅速发生,该计划最终陷入停滞。
我是新来的Objective-C,但我不是新手编程,我无法理解这种行为。方法bitmapData的文档声明它只是返回一个指针(而不是分配内容),所以我很难过。我从前一段时间发现了一个类似的问题,但唯一的答案是“调查泳池”,但我不明白这对此有何帮助。
任何想法这里发生了什么?
貌似我错了:-) – drekka 2010-11-13 04:08:22