这是内存泄漏吗?

时间:2010-10-18 15:16:03

标签: iphone objective-c cocoa-touch

我有以下2个代码段。 假设我有一个Parent类,在Parent.h类中我有

@property (retain) NSMutableArray *childrens;

我正确地在.m文件中合成它。 在Parent.m文件中假设

- (void)dealloc

{

 [childrens release];
 [super dealloc];

}

在另一个课程中,我这样宣布。

1

Parent *p = [[Parent alloc] init];
p.chidlrens = [[NSMutableArray alloc] init];
// do some other stuff

2

Parent *p = [[Parent alloc] init];
NSMutableArray *childArray = [[NSMutableArray alloc] init];
p.childrens = childArray;
[childArray release];

从上述2种方法中,方法1中是否存在泄漏?

4 个答案:

答案 0 :(得分:5)

是的,方法1中存在泄漏。您分配NSMutableArray但不释放它。

答案 1 :(得分:2)

虽然没有回答你的问题,但我建议使用Parent init并在其init方法中分配数组,因此你的代码在别处不必担心检查它是否已经创建并执行它。那么你不需要使用Parent担心Parent的内存管理的类 - Parent可以这样做。

答案 2 :(得分:1)

一般规则是释放你在做什么的alloc,init on。

但要进行构建+分析以获得一些“潜在的”泄漏。 如果你想100%确定,请通过泄漏运行

答案 3 :(得分:1)

在没有人帮助的情况下,您可以检查泄漏的位置。例如,使用任何插件。我使用deleaker并确切知道内存泄漏的位置。