在没有泄漏的情况下返回NSArray?

时间:2010-06-22 00:23:13

标签: objective-c memory-leaks

我一直在努力寻找从静态方法返回数组的最佳模式。

在我的静态方法getList(在BIUtility Class中)中,我正在分配一个NSArray来返回。在返回行中,我这样做:

return [array autorelease];

然后在调用方法中,我分配一个这样的数组:

NSArray * list = [[[NSArray alloc] initWithArray:[BIUtility getList]] retain];

稍后我使用以下方式发布列表:

[list release];

我认为这会导致内存泄漏,因为保留会使保留计数增加太多。但是,如果我不进行保留,我会得到一个Bad_Exec,因为它已经释放了该类。

我觉得我正在过度思考这一点,必须有一个典型的模式。我一直在寻找这个地方,我找不到“最佳实践”。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你应该替换:

NSArray * list = [[[NSArray alloc] initWithArray:[BIUtility getList]] retain];

使用:

NSArray * list = [[BIUtility getList] retain];

这是因为getList实际上返回了指向NSArray的指针。

如果它是一个可变数组,你应该说[[BIUtility getList] copy];,这样你就不会意外地改变另一个对象有引用的数组。

如果您感到好奇,那么您会收到内存泄漏,因为您的原始语句会增加两个计数器,而您稍后只会释放一个。

声明的这些部分增加了数量:

 [anObject]] retain]
 [anClassname alloc]

[anObject copy]还会创建一个计数为1的对象。

相关问题