小编rwa*_*rwa的帖子

objc泄漏行为我无法解释

以下代码循环不会泄漏内存(通过在"top"下无限循环来验证);

NSBitmapImageRep *this_bmap = 0;

while (1) {

  CGImageRef windowImage = 
     CGWindowListCreateImage(CGRectNull,
                             kCGWindowListOptionIncludingWindow,
                             windowID, kCGWindowImageDefault);

  this_bmap = [[NSBitmapImageRep alloc] initWithCGImage:windowImage];

  [this_bmap release];
  CGImageRelease(windowImage);
}
Run Code Online (Sandbox Code Playgroud)

我不指望它.但是,当我复制指向位图数据的指针时,如下所示:

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);
}
Run Code Online (Sandbox Code Playgroud)

这现在像疯了一样泄漏.我可以看到这种情况在"顶层"下迅速发生,程序最终会停止.

我是Objective-C的新手,但我不是编程的新手,我无法理解这种行为.方法bitmapData的文档声称它只返回一个指针(而不是分配一些东西),所以我很难过.我从一段时间前发现了一个类似的问题,但唯一的答案是"调查池",我不知道这有多大帮助.

有什么想法在这里发生了什么?

macos cocoa objective-c

3
推荐指数
1
解决办法
390
查看次数

标签 统计

cocoa ×1

macos ×1

objective-c ×1