Iphone 仪器内存泄漏和电弧混淆

Iphone 仪器内存泄漏和电弧混淆,iphone,objective-c,memory-leaks,automatic-ref-counting,instruments,Iphone,Objective C,Memory Leaks,Automatic Ref Counting,Instruments,早上好 我对我一直在开发的应用程序进行了一些微调,以确保一切都顺利运行,并且没有内存泄漏发生。所以我用仪器运行我的应用程序,选择了分配和泄漏工具 我的应用程序运行得非常好,直到仪器检测到一个泄漏的物体,碰巧是UIImage。让我困惑的是,我使用的是ARC,所以我的理解是所有的保留/释放/自动释放调用都由我负责 另一件让我困惑的事情是,当我看到泄漏的扩展细节时,它显示负责的帧是[UIImage imageWithCGImage:scale:orientation],我在整个应用程序中从未调用过该方

早上好

我对我一直在开发的应用程序进行了一些微调,以确保一切都顺利运行,并且没有内存泄漏发生。所以我用仪器运行我的应用程序,选择了分配和泄漏工具

我的应用程序运行得非常好,直到仪器检测到一个泄漏的物体,碰巧是UIImage。让我困惑的是,我使用的是ARC,所以我的理解是所有的保留/释放/自动释放调用都由我负责

另一件让我困惑的事情是,当我看到泄漏的扩展细节时,它显示负责的帧是[UIImage imageWithCGImage:scale:orientation],我在整个应用程序中从未调用过该方法,我甚至在我的工作区中搜索了它,但没有得到任何结果

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

点击右边的Xcode徽标也没有任何帮助。我一直在尝试调试这可能是什么,这让我感到困惑。我确保NSZombieEnabled设置为YES,以防我尝试使用解除分配对象,但我无法找到解决方案。为什么会发生这种情况(在ARC下),我如何修复它

谢谢

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

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


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

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


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

更新

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


虽然这只是一个很小的漏洞,但我鼓励所有人都将你的应用程序免费发布

更新

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


虽然这只是一个很小的漏洞,但我鼓励所有人都将你的应用程序免费发布

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

    [[UITabBar appearance] setTintColor:[UIColor redColor]];
    [[UITabBar appearance] setSelectedImageTintColor:[UIColor brownColor]];

我有同样的问题,然后我改变代码使用外观选择器,如下所示,然后问题消失

    [[UITabBar appearance] setTintColor:[UIColor redColor]];
    [[UITabBar appearance] setSelectedImageTintColor:[UIColor brownColor]];

所以,如果UIKit有问题,那么我的应用程序在发布时就会泄漏?我对此无能为力?现在记忆已经扩展到更复杂的东西了,我又拍了一张快照不幸的是,可以这么说!您/我们可以希望苹果在下一个iOS版本中修复它,或者您可以尝试找到一种解决方法,使您的代码不会执行错误的框架代码。你的应用程序现在到底泄漏了多少内存?一开始只有44个字节,但根据我拍摄的最新快照,它变得有点复杂(仍然泄漏我甚至没有在这个应用程序中编写的代码),现在大约泄漏380-400个字节,我想这不算多,但仍然泄漏,所以如果是UIKit的问题,那么我的应用程序在发布时会泄漏吗?我对此无能为力?现在记忆已经扩展到更复杂的东西了,我又拍了一张快照不幸的是,可以这么说!您/我们可以希望苹果在下一个iOS版本中修复它,或者您可以尝试找到一种解决方法,使您的代码不会执行错误的框架代码。你的应用程序现在实际泄漏了多少内存?一开始只有44个字节,但根据我拍摄的最新快照,它变得更复杂了(仍然泄漏我甚至没有在这个应用程序中编写的代码),现在大约泄漏380-400个字节,我想这并不多,但它仍然在泄漏我能问一下你是怎么找到这么模糊的东西的吗?仅仅是一个总体的攻击计划会有帮助。我能问一下你是如何把它追溯到如此模糊的事情上的吗?只是一个总的进攻计划会有帮助。