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 中收到内存警告

ARC 和dismissModalViewControllerAnimated:视图控制器内存未释放

为啥 ARC 在 popViewController 之后不释放内存

循环内的 Objective-C 循环和 @autoreleasepool 的 ARC 内存问题

循环和便利方法是不是会导致 ARC 出现内存峰值?

iOS:ARC,不释放内存