Objective c App中的内存泄漏问题

时间:2013-12-11 07:38:00

标签: ios objective-c memory-management memory-leaks

在我的iOS应用中,ARC被禁用。当我使用仪器工具检查我的代码时,我在代码中发现了一些内存泄漏问题,如下所述。

Obj1是在.h文件中声明的对象(其类型为classA)。

我使用代码

在.m文件中设置Obj1的值
self.Obj1 = [[classA alloc]init];

我在dealloc方法中发布Obj1

此代码工作正常。但显示内存泄漏问题。

如何避免此内存泄漏问题。??

5 个答案:

答案 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。