Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在类内使用grandcentraldispatch方法会导致内存泄漏_Iphone_Objective C_Grand Central Dispatch - Fatal编程技术网

Iphone 在类内使用grandcentraldispatch方法会导致内存泄漏

Iphone 在类内使用grandcentraldispatch方法会导致内存泄漏,iphone,objective-c,grand-central-dispatch,Iphone,Objective C,Grand Central Dispatch,当视图控制器在我创建gcd队列的行调用我的模型类方法时,我得到了内存泄漏。有什么想法吗 +(void)myClassMethod { dispatch_queue_t myQueue = dispatch_queue_create("com.mysite.page", 0); //run with leak instrument points here as culprit dispatch_async(myQueue, ^{}); } 泄漏工具报告分配的内存不再有代码中的任何

当视图控制器在我创建gcd队列的行调用我的模型类方法时,我得到了内存泄漏。有什么想法吗

+(void)myClassMethod {
    dispatch_queue_t myQueue = dispatch_queue_create("com.mysite.page", 0); //run with leak instrument points here as culprit
    dispatch_async(myQueue, ^{});
}

泄漏工具报告分配的内存不再有代码中的任何引用


在该方法运行后,由于没有任何内容引用您创建的队列,并且从未调用dispatch_release(),因此将其视为泄漏。

您应该将其更改为

dispatch_queue_t myQueue = dispatch_queue_create("com.mysite.page", 0);
dispatch_async(myQueue, ^{});
dispatch_release(myQueue);
。。。当您不再需要访问队列时,应调用
dispatch\u release
。由于
myQueue
是局部变量,您必须在那里调用它

读取调度队列创建文档:

讨论

提交到队列的块按FIFO顺序一次执行一个。然而,请注意,提交到独立队列的块可以彼此并发执行


当您的应用程序不再需要调度队列时,它应该使用dispatch\u release函数将其释放。提交到队列的任何挂起块都包含对该队列的引用,因此在所有挂起块完成之前,队列不会解除分配。

即使ARC也不会为您处理该问题。所以你也必须释放它:dispatch_release(myQueue)…这仍然是真的吗?使用ARC,我们不需要释放它