我一直在努力寻找从静态方法返回数组的最佳模式。
在我的静态方法getList(在BIUtility Class中)中,我正在分配一个NSArray来返回。在返回行中,我这样做:
return [array autorelease];
然后在调用方法中,我分配一个这样的数组:
NSArray * list = [[[NSArray alloc] initWithArray:[BIUtility getList]] retain];
稍后我使用以下方式发布列表:
[list release];
我认为这会导致内存泄漏,因为保留会使保留计数增加太多。但是,如果我不进行保留,我会得到一个Bad_Exec,因为它已经释放了该类。
我觉得我正在过度思考这一点,必须有一个典型的模式。我一直在寻找这个地方,我找不到“最佳实践”。
感谢您的帮助。
答案 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的对象。