下面的代碼循環不會泄漏內存(通過觀察它在無限循環下「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