以下代码将占用~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)
我试过了:
NSRunLoop run循环我尝试了几种组合,从未看到内存减少(即使在等待几分钟后).我知道GCD参考指南,其中包含以下声明:
尽管GCD调度队列具有自己的自动释放池,但它们无法保证这些池何时耗尽.
这段代码中是否有内存泄漏?如果没有,有没有办法强制队列释放/排出已完成的块?
memory-leaks libdispatch grand-central-dispatch dispatch-async