当视图控制器在我创建 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_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 函数释放它。任何提交到队列的未决块都持有对该队列的引用,因此在所有未决块完成之前不会释放队列。
Leak 工具报告内存分配的位置,不再有任何来自您的代码的引用。
在该方法运行后,由于没有任何内容引用您创建的队列,并且从未调用 dispatch_release(),因此它被视为泄漏。