在我的iOS应用程序中ARC被禁用。当我使用仪器工具检查我的代码时,我在代码中发现了一些内存泄漏问题,如下所述。目标c中的内存泄漏问题应用程序
Obj1是一个在.h文件中声明的对象(其类型为classA
)。
self.Obj1 = [[classA alloc]init];
我释放dealloc方法Obj1
:
我使用的代码集在.m文件的Obj1
值。
此代码正常工作。但显示内存泄漏问题。
如何避免此内存泄漏问题。
在我的iOS应用程序中ARC被禁用。当我使用仪器工具检查我的代码时,我在代码中发现了一些内存泄漏问题,如下所述。目标c中的内存泄漏问题应用程序
Obj1是一个在.h文件中声明的对象(其类型为classA
)。
self.Obj1 = [[classA alloc]init];
我释放dealloc方法Obj1
:
我使用的代码集在.m文件的Obj1
值。
此代码正常工作。但显示内存泄漏问题。
如何避免此内存泄漏问题。
如果你犯了一个属性保留OBJ1由1意味着增量您的Alloc通过增量1这个对象在此之后,所以它的价值保持2
使用下面的代码:
ClassA *objC = [[classA alloc]init];
self.Obj1 = objC;
[objC release];
使用下面的代码:
self.Obj1 = [[[classA alloc]init]autorelease];
当视图在不使用或卸载的dealloc才会被调用。
有许多方法来处理这个问题:
首先,
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.
,您保留对象again.So self.Obj1 = [[classA alloc]init];
后,对象保留计数为2
如果使用NSZombieEnabled宏处理工作,发布对象的所有对象(甚至是发布)将有至少1保留计数和工具会将所有对象显示为“泄漏”。处理内存泄漏时,只需关闭此宏。 参见技术参考: https://developer.apple.com/library/ios/technotes/tn2239/_index.html