来自 Foundation 和 CFNetwork 库的内存泄漏

Posted

技术标签:

【中文标题】来自 Foundation 和 CFNetwork 库的内存泄漏【英文标题】:Memory Leak from Foundation & CFNetwork Library 【发布时间】:2010-04-21 21:26:22 【问题描述】:

我正在使用工具来解决 iPhone 中某个应用的内存泄漏问题。我只是想知道我是否必须解决来自 Foundation 和 CFNetwork 库的泄漏。具体来说,泄漏来自: 1. NSCFString 2. NSConcreteData 3. 通用 Block-3584 由于它们不直接指向我编写的代码,如果必须,我应该如何解决它们?

谢谢。

【问题讨论】:

【参考方案1】:

几乎可以肯定内存泄漏来自您的代码——Foundation 库中几乎没有内存泄漏,前提是您在设备上进行测试(模拟器中存在内存泄漏,因此您应该始终在装置)。泄漏的来源并不总是很明显,而且很难从您的问题中分辨出来,但我猜它要么来自泄漏NSStringNSStrings 是通过 NSCFString 在引擎盖下实现的)或网络- 相关类,如NSURLConnection

【讨论】:

好的,但是如果错误来自我的代码,我不会让错误库成为我的应用程序的名称吗? 通常,方法链和函数调用链会很复杂,尤其是在处理任何线程或异步方法时。例如,如果您正在处理NSURLConnection,则库可能会显示为CFNetwork(我不确定这是不是我的想法,这只是一个假设的例子)。话虽如此,框架中存在一些漏洞,您可能遇到了一个漏洞:请参阅***.com/questions/478242/leak-generalblock-3584。 我彻底检查了我的代码。使用 alloc 创建的所有内容在使用后都已发布。是否有任何其他创建实例需要我释放它? @Lakshmie:你需要release对象的唯一其他时间是方法名称中带有copynew的方法(另外,如果你retain一个对象,你有稍后发送给release)。当我说它“几乎可以肯定”不是框架代码时,我可能言过其实了——General Block-3584 泄漏看起来可能来自框架。 谢谢。我已经检查了所有这些。我仍然得到 NSConcreteData 和 NSCFString 泄漏,并且我的应用程序没有报告它们。【参考方案2】:

我遇到了与 CFNetwork 和 Foundation 框架有关的内存泄漏问题。一个小修复清除了所有内存泄漏。在使用异步 HTTP 连接时,我遇到了这个问题。

问题:

在委托中,- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse*) 响应,

我复制了 NSURLResponse 并发布了。

解决办法:

不要复制和发布 NSURLResponse。只需将其用作头文件中的属性 asstype。

【讨论】:

以上是关于来自 Foundation 和 CFNetwork 库的内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

scss 块网格(来自Zurb Foundation)

scss 来自Foundation(Zurb)的Flex Video Mixin的修改版本https://github.com/zurb/foundation/blob/master/scss/fou

网络请求相关小结2

iOS CFNetwork报错

CFNetwork 在 iOS 和 MacOS 上优于 BSD 套接字和 GCD 的优势?

来自 Team Foundation Server 管理控制台的错误消息