在我的iOS应用中,ARC被禁用。当我使用仪器工具检查我的代码时,我在代码中发现了一些内存泄漏问题,如下所述。
Obj1是在.h文件中声明的对象(其类型为classA
)。
我使用代码
在.m文件中设置Obj1
的值
self.Obj1 = [[classA alloc]init];
我在dealloc方法中发布Obj1
。
此代码工作正常。但显示内存泄漏问题。
如何避免此内存泄漏问题。??
答案 0 :(得分:0)
使用以下代码:
self.Obj1 = [[[classA alloc]init]autorelease];
只有在视图未被使用或卸载时才会调用Dealloc。
答案 1 :(得分:0)
如果使用NSZombieEnabled宏处理已发布对象的工作,则所有对象(甚至已发布)将至少具有1个保留计数,并且工具将所有对象显示为“泄漏”。在处理内存泄漏时,只需关闭此宏。 参见技术说明参考: https://developer.apple.com/library/ios/technotes/tn2239/_index.html
答案 2 :(得分:-1)
有很多方法可以解决这个问题:
首先,
self.Obj1 = [[[classA alloc]init]autorelease];
其次,
Obj1 = [[classA alloc]init];
...
// use self.Obj1 in the code
...
[Obj1 release];
第三,
self.Obj1 = [[classA alloc]init];
...
[self.Obj1 release];
使用其中的任何一个。
答案 3 :(得分:-1)
如果你保留一个属性,Obj1意味着递增1然后在你用增量1分配这个对象后,它的值保留为2.
使用以下代码:
ClassA *objC = [[classA alloc]init];
self.Obj1 = objC;
[objC release];
答案 4 :(得分:-1)
您可以删除self.
,仅Obj1 = [[classA alloc]init];
。
因为当你调用self.
时,你会再次保留该对象。所以在self.Obj1 = [[classA alloc]init];
之后,对象保留计数为2。