当 View Controller 在我创建我的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_queue_t myQueue = dispatch_queue_create("com.mysite.page", 0);
dispatch_async(myQueue, ^{});
dispatch_release(myQueue);

...当您不再需要访问队列时,应调用dispatch_release。由于myQueue是局部变量,因此必须在此处进行调用。

阅读dispatch_queue_create文档:

讨论

提交到队列的块按FIFO顺序一次执行。但是请注意,提交给独立队列的块可以相对于彼此同时执行。

当您的应用程序不再需要调度队列时,应使用dispatch_release函数将其释放。提交到队列的所有挂起的块都拥有对该队列的引用,因此在所有挂起的块完成之前,不会释放该队列。

关于iphone - 在类方法中使用盛大的中央调度会导致内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5411272/

10-10 11:50