小编And*_*eas的帖子

GCD dispatch_async内存泄漏?

以下代码将占用~410MB的内存,不会再次释放.(使用的版本dispatch_sync代替dispatch_async将需要~8MB内存)
我预计会有高内存使用率的飙升,但它应该再次下降......泄漏在哪里?

int main(int argc, const char * argv[]) {
  @autoreleasepool {
    for (int i = 0; i < 100000; i++) {
      dispatch_async(dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), ^{
        NSLog(@"test");
      });
    }
    NSLog(@"Waiting.");
    [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:60]];
  }
  return 0;
}  
Run Code Online (Sandbox Code Playgroud)

我试过了:

  • 在循环内部和内部添加@autoreleasepool
  • 添加NSRunLoop run循环

我尝试了几种组合,从未看到内存减少(即使在等待几分钟后).我知道GCD参考指南,其中包含以下声明:

尽管GCD调度队列具有自己的自动释放池,但它们无法保证这些池何时耗尽.

这段代码中是否有内存泄漏?如果没有,有没有办法强制队列释放/排出已完成的块?

memory-leaks libdispatch grand-central-dispatch dispatch-async

9
推荐指数
1
解决办法
1850
查看次数