2

早上好,

我正在对我一直在研究的这个应用程序进行一些微调,只是为了确保一切运行顺利并且没有发生内存泄漏。所以我使用 Instruments 运行我的应用程序,并选择了分配和泄漏工具。

我的应用程序运行得非常好,直到 Insturments 检测到恰好是 UIImage 的泄漏对象。让我感到困惑的是我使用的是 ARC,所以我的理解是所有的保留/释放/自动释放调用都在为我处理。

让我感到困惑的另一件事是,当我看到泄漏的扩展详细信息时,它显示责任框架是 [UIImage imageWithCGImage:scale:orientation] 并且我从未在整个应用程序中调用过该方法,我什至搜索了它在我的工作区中并没有得到任何结果。

当我双击泄漏的对象以在 Xcode 中为我打开它时,它只是打开了一个框架并显示“不可用”。截图如下:

仪器截图

并且单击它右侧的 Xcode 徽标也没有任何帮助。我一直在尝试调试这可能是什么,这让我很难过。我确保 NSZombieEnabled 设置为 YES 以防我尝试使用已释放的对象,但我无法找到解决方案。为什么会发生这种情况(在 ARC 下),我该如何解决?

谢谢,

编辑:这是我对泄漏的最新快照 这是我对泄漏的最新快照

4

3 回答 3

3

那么,泄漏可能来自框架内部的某个地方(UIKit 或更深)。如果是这样,那么您无能为力。要么是应用程序内部的某种“副作用”,后来在 UIKit 内部深处出现([UIImage imageWithCGImage:scale:orientation]),要么是 UIKit 本身的问题。但最终很难确定!

使用 ARC 仍然不能保证 100% 无内存泄漏的代码!;)

于 2013-01-02T15:34:58.450 回答
1

更新

在花了我一天的时间调试代码并希望尽管应用程序只泄漏大约 400 字节的情况下让它不泄漏,我让它无泄漏。非常感谢@Nenad M 的帮助。事实证明,我的泄漏的一个非常奇怪的来源是将我的 UITabBar 的 selectedImageTintColor 设置为 [UIColor blueColor]。就像你说的那样,这一定是导致 CoreGraphics 和/或 UIKit 内部的某些东西在某处触发 [UIImage imageWithCGImage:scale:orientation] 调用而不被 ARC 释放。

尽管这是一个非常小的泄漏,但我鼓励所有人免费发布您的应用程序!

于 2013-01-03T00:41:13.430 回答
0

我遇到了同样的问题,然后我将代码更改为使用如下所示的外观选择器,然后问题就消失了

    [[UITabBar appearance] setTintColor:[UIColor redColor]];
    [[UITabBar appearance] setSelectedImageTintColor:[UIColor brownColor]];
于 2013-09-17T14:33:25.767 回答