在我的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。