NSOperationQueue、内存和GCD;如何正确实施?

发布于 2024-10-24 10:10:49 字数 232 浏览 4 评论 0 原文

我对 NSOperation 和 GCD 有一些简单的疑问,但在文档中没有找到答案。

第一个问题与内存管理有关:

我想知道是否需要为要添加到 NSOperationQueue 的方法创建一个 Autorealease 池;类似于在没有 NSOperations 的情况下在不同线程上运行方法时。

下一个问题是 NSOperation 是否负责 GCD 还是需要手动完成?

感谢您的帮助!

I have some simple doubts about NSOperation and GCD that I have not found answer to on the documentation.

The firs question is related to memory management:

I want to know if I need to create an Autorealease pool for the methods I wil add to the NSOperationQueue; similarly to when you run a method on different thread without NSOperations.

The next question is whether NSOperation takes care of GCD or if this needs to be done manually?

Thank you for your help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烈酒灼喉 2024-10-31 10:10:49

我刚刚在这里看到你的问题,你可能会对 Apple 开发者论坛上的帖子感兴趣根据该线程上的一位苹果人员的说法,只要您通过 NSOperationQueue 运行 NSOperation,您就不需要创建自己的自动释放池,因为 NSOperationQueue 会为您完成此操作。

NSOperationQueue 的文档显然也需要更新/更正。在运行 iOS 4 或更高版本的设备上,无论类参考文档如何规定,NSOperationQueue 确实使用 GCD。

I just saw your question here and there is a post on the apple dev forums you might be interested in. According to one of the apple guys on this thread so long as you run your NSOperation through an NSOperationQueue you do not need to create your own autorelease pool as the NSOperationQueue does it for you.

Also the docs for NSOperationQueue apparently need to be updated/corrected. On devices running iOS 4 or later NSOperationQueue does use GCD despite what the class reference documents say.

回忆凄美了谁 2024-10-31 10:10:49

根据文档,您应该在 NSOperation 的 main 方法中创建一个 NSAutoreleasePool。 NSIncationOperation 和 NSBlockOperation 的文档没有指定它们是否为您创建自动释放池,因此为了安全起见,最好在使用这些类时也创建一个自动释放池。

NSOperationQueue 处理排队和执行操作,因此您不必自己为与操作队列相关的任务而扰乱 GCD。

According to the documentation, you should create an NSAutoreleasePool in the main method of your NSOperation. The documentation for NSInvocationOperation and NSBlockOperation doesn't specify whether they create an autorelease pool for you, so to be safe it would be best to create one when using those classes too.

The NSOperationQueue handles queuing and executing the operations, so you shouldn't have to mess with GCD yourself for tasks related to the operation queue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文