iphone – 你需要在GCD中的一个块中创建一个NSAutoreleasePool吗?

iphone – 你需要在GCD中的一个块中创建一个NSAutoreleasePool吗?,第1张

概述通常,如果您生成一个后台线程或在NSOperationQueue上运行NSOperation,您需要为该线程或 *** 作创建一个NSAutoreleasePool,因为默认情况下不存在。 相同的规则是否适用于放置在Grand Central Dispatch队列中并将在非主线程上运行的块?也就是说,你需要在每个块中创建一个NSAutoreleasePool,它分派给主队列以外的任何东西? 在我有限的测试 通常,如果您生成一个后台线程或在NSOperationQueue上运行NSOperation,您需要为该线程或 *** 作创建一个NSautoreleasePool,因为默认情况下不存在。

相同的规则是否适用于放置在Grand Central dispatch队列中并将在非主线程上运行的块?也就是说,你需要在每个块中创建一个NSautoreleasePool,它分派给主队列以外的任何东西?

在我有限的测试,我没有看到自动释放对象的控制台警告,你通常看到与后台线程或NSOperations。然而,我似乎找不到这个的确切文档,所以我想知道是否有人可以指出这是什么。

解决方法

Does the same rule apply to a block
that is placed within a Grand Central
dispatch queue and will be run on a
non-main thread? That is,do you need
to create an NSautoreleasePool within
each block you dispatch to anything
other than the main queue?

Grand Central dispatch将自动为每个队列管理一个自动释放池。然而,没有保证池何时被排空;它可能在一个块被处理之后,它可能在数百之后(但可能不会)。

所以,如果你只分配一些对象,不要担心。但是,如果您分配任何大量对象(并且由于您定位的是内存受限环境),那么您应该创建和删除池。

文档已更新。

看到
 https://developer.apple.com/library/ios/DOCUMENTATION/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref/doc/uid/TP40008091-CH102-SW1

If your block creates more than a few Objective-C objects,you might want to enclose parts of your block’s code in an @autorelease block to handle the memory management for those objects. Although GCD dispatch queues have their own autorelease pools,they make no guarantees as to when those pools are drained. If your application is memory constrained,creating your own autorelease pool allows you to free up the memory for autoreleased objects at more regular intervals.

总结

以上是内存溢出为你收集整理的iphone – 你需要在GCD中的一个块中创建一个NSAutoreleasePool吗?全部内容,希望文章能够帮你解决iphone – 你需要在GCD中的一个块中创建一个NSAutoreleasePool吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049090.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存