2010-06-22 59 views
0

我一直在努力从静态方法返回数组的最佳模式。返回一个NSArray没有泄漏?

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

return [array autorelease]; 
在调用方法

然后,我分配一个这样的数组:

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

后来我释放使用名单:

[list release]; 

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

我觉得我正在过度这个,并且必须有一个典型的模式。我一直在寻找所有的地方,我找不到“最佳做法”。

我感谢您的帮助。

回答

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

+0

我做这个计数的对象,但后来我得到的消息EXC_Bad_Instruction因为它正试图在已经发布的对象上进行发布。我不需要对保留的对象进行显式发布吗? – 2010-06-22 00:48:40

+0

@Michael:你最初怎么声明数组? – 2010-06-22 00:58:07

+0

像这样... NSArray * moveList = [[NSArray alloc] init]; 有时我必须使用NSMutableArray,因为我从SQL查询构建它,但是我返回一个NS数组。 – 2010-06-22 01:20:42