gpt4 book ai didi

ios - 在IOS、ARC中,虽然引用计数降为0,但对象仍然没有被释放

转载 作者:行者123 更新时间:2023-11-29 12:40:44 25 4
gpt4 key购买 nike

我的代码如下,在IOS7.1的ARC下。

void function
{
for (int i = 0; i < 100000; i++)
{
UIImage *buttonBar_test = [[UIImage alloc] init];
//[buttonBar_test release];
}

}

虽然引用计数降为 0,临时对象 (buttonBar_test) 仍然存在,在函数返回后没有被系统释放。为什么?

![在 instrument->allocations 中启用“Record reference counts”][1]

![函数返回后,临时对象还活着,很奇怪?!][2]

![引用计数降为 0,但没有对对象调用“free”,所以对象还活着][3]

我创建了一个演示项目,这个问题不存在。但是在我自己的项目中,它存在。不知道为什么,请问有没有相关的配置?

(此外,我自己的项目链接了一些未启用 arc 的第 3 方依赖项,但在我的全局链接器标志设置中,它包含:-fobjc-arc)

最佳答案

如果dealloc被调用了,但是支持对象的内存没有被释放,有两种可能:

  1. 你没有调用[super dealloc]在你的 -dealloc 末尾(仅适用于非 ARC 代码)
  2. 您启用了 Zombies。这可以通过 Instruments 中的复选框(在 ObjectAlloc 仪器的配置中)或通过 Scheme 编辑器中的 Diagnostics 选项卡来完成。

很可能你有Zombies enabled ,
这是一个如何禁用它的小指南。

1) 打开方案编辑器。

enter image description here

2) 点击Run $<Project name> (标签 1)
3) 点击Diagnostics (标签 2)
4)取消勾选Enable Zombie Objects .

enter image description here

关于ios - 在IOS、ARC中,虽然引用计数降为0,但对象仍然没有被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25035364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com