Objective c应用程序内存泄漏问题



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

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

我使用代码在.m文件中设置Obj1的值

self.Obj1 = [[classA alloc]init];

我在dealloc方法中释放Obj1

此代码运行良好。但是显示了内存泄漏问题。

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

使用以下代码:

self.Obj1 = [[[classA alloc]init]autorelease];

只有在视图未使用或未卸载时才会调用Dealloc。

如果使用NSZombieEnabled宏处理已发布对象的工作,则所有对象(即使已发布)都将至少有1个保留计数,并且工具将显示所有对象为"泄漏"。处理内存泄漏时,只需关闭此宏。参考资料见技术说明:https://developer.apple.com/library/ios/technotes/tn2239/_index.html

如果您使属性retain Obj1意味着递增1,那么在您将该对象分配递增1之后,它的值将保持2。

使用以下代码:

ClassA *objC = [[classA alloc]init];
self.Obj1 = objC;
[objC release];

有很多方法可以处理此问题:

首先,

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];

使用这些中的任何一个。

您可以删除self.,只删除Obj1 = [[classA alloc]init];。因为当您调用self.时,您将再次保留该对象。所以在self.Obj1 = [[classA alloc]init];之后,对象保留计数为2。

最新更新