iphone - 在类方法中使用 grand central dispatch 会导致内存泄漏

标签 iphone objective-c grand-central-dispatch

当 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 文档:

讨论

提交到队列的 block 以 FIFO 顺序一次执行一个。但是请注意,提交到独立队列的 block 可能会相互并发执行。

当您的应用程序不再需要调度队列时,它应该使用 dispatch_release 函数释放它。提交到队列的任何待处理 block 都持有对该队列的引用,因此在所有待处理 block 完成之前不会释放队列。

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

相关文章:

objective-c - 在 Cocoa 应用程序中编辑 NSBezierPath

ios - GCD、NSThread 和 PerformSelector :onThread: issues

iphone - tableViewController 中的多线程奇怪延迟

ios - 如果我的应用程序处于终止状态,iOS 区域监控是否会在我的应用程序上调用 didEnterRegion?

iphone - 如何仅在视频上启用旋转

ios - dispatch_after 会阻塞 UI 吗?

ios - 如何将两个 UIImage 添加到 UITableView 背景

ios - 是否可以将dispatch_queue_t添加到NSMutableArray?

arrays - 跨多个线程将项目添加到 Swift 数组会导致问题(因为数组不是线程安全的)——我该如何解决这个问题?

iphone - 为什么标签不接收字符串