【问题标题】:Memory leaking issue in Objective c AppObjective c App中的内存泄漏问题
【发布时间】:2013-12-11 07:37:59
【问题描述】:
在我的 iOS 应用中,ARC 被禁用。当我使用仪器工具检查我的代码时,我在我的代码中发现了一些内存泄漏问题,如下所述。
Obj1 是一个在.h 文件中声明的对象(其类型为classA)。
我使用代码在.m文件中设置Obj1的值:
self.Obj1 = [[classA alloc]init];
我在dealloc方法中释放Obj1。
这段代码运行良好。但显示内存泄漏问题。
我怎样才能避免这个内存泄漏问题??
【问题讨论】:
标签:
ios
objective-c
memory-management
memory-leaks
【解决方案1】:
使用下面的代码:
self.Obj1 = [[[classA alloc]init]autorelease];
只有当视图没有被使用或卸载时才会调用Dealloc。
【解决方案3】:
如果你让一个属性保持 Obj1 意味着递增 1,那么在你分配这个对象之后递增 1,所以它的值保持 2。
使用下面的代码:
ClassA *objC = [[classA alloc]init];
self.Obj1 = objC;
[objC release];
【解决方案4】:
有很多方法可以解决这个问题:
首先,
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];
使用其中任何一种。
【解决方案5】:
您可以删除self.,只删除Obj1 = [[classA alloc]init];。
因为当你调用self.的时候,又是retain了对象,所以self.Obj1 = [[classA alloc]init];之后,object的retain count是2。