我的代码如下所示,在IOS7.1中的ARC下。
void function
{
for (int i = 0; i < 100000; i++)
{
UIImage *buttonBar_test = [[UIImage alloc] init];
//[buttonBar_test release];
}
}
虽然引用计数降为0,但临时对象(buttonBar_test)仍然存活,在函数返回后系统不会释放它们。为什么呢?
![在仪器 - &gt;分配中,启用&#34;记录参考计数&#34;] [1]
![函数返回后,临时对象仍然活着,非常奇怪?!] [2]
![引用计数降至0,但没有&#34; free&#34;在对象上被调用,所以对象仍然存在] [3]
我创建了一个演示项目,这个问题并不存在。但在我自己的项目中,它存在。我不知道为什么,是否有与此问题相关的配置?
(另外,我自己的项目链接了一些没有启用arc的第三方依赖项,但在我的全局链接器标志设置中,它包含:-fobjc-arc)
答案 0 :(得分:1)
如果调用了dealloc
,但是没有释放支持该对象的内存,则有两种可能:
[super dealloc]
结束时致电-dealloc
(仅适用于非ARC代码)您最有可能Zombies enabled
,
这是一个如何禁用它的小指南。
1)打开方案编辑器。
2)点击Run $<Project name>
(标签1)
3)点击Diagnostics
(标签2)
4)取消选中Enable Zombie Objects
。