ARC 和内存问题
Posted
技术标签:
【中文标题】ARC 和内存问题【英文标题】:ARC and memory Issue 【发布时间】:2013-11-19 05:01:42 【问题描述】:ARC 在我的项目中启用,我在本网站的一篇文章中发现 Cocoa 在主线程上为您创建了一个自动释放池,但在后台线程上没有为您做任何事情。如果您要在不使用 NSOperation 或其他东西的情况下将某些东西启动到后台线程上,您需要将该线程包装在 @autoreleasepool ARC memory leaks 我修改了我的代码,仍然有内存泄漏问题。请帮忙。
Bryan Chen 说我已经编辑了
现在在这里遇到问题
下一次修改
【问题讨论】:
您使用 Instruments 中的什么配置文件来获得这些结果? Instruments 没有“配置”配置文件。当您 Build for Profiling 并打开另一个应用程序时,您会从出现的工作表中选择什么? 如果你查看对象列表,它说什么是泄漏?这比随机截取代码更有帮助。 【参考方案1】:将@autoreleasepool
放入您的第一个dispatch_async
(jsonParsingQueue)
【讨论】:
【参考方案2】:请注意,当您dispatch_async
一个块到主队列时,该块将在主线程上执行,因此已经有一个自动释放池。因此,现有代码中的自动释放池在它所在的位置是不必要的,并且应该移动它以包含被分派到 jsonParsingQueue
的块的全部内容。
编辑:实际上,所有 GCD队列确实有自动释放池,所以虽然创建一个额外的池来更好地控制内存使用是有用的,它如果您不这样做,则不应导致泄漏。我想你可能还有其他问题。
参考这里:Do you need to create an NSAutoreleasePool within a block in GCD?
【讨论】:
根据您仍有问题编辑 您的@autoreleasepool 仍然不完全正确。它应该包含被分派到 jsonParsingQueue 的块的内容。也就是说,它应该在看起来像dispatch_async(jsonParsingQueue, ^
的行之后开始,并在关闭内部 dispatch_async 的 );
之后的行结束。以上是关于ARC 和内存问题的主要内容,如果未能解决你的问题,请参考以下文章
ARC 和dismissModalViewControllerAnimated:视图控制器内存未释放
为啥 ARC 在 popViewController 之后不释放内存