我有以下代码:
@interface MyClass : NSObject
{
NSMutableArray *items;
}
@end
@implementation MyClass
-(Item *)getItem
{
if(items.count < 1)
{
[self buildItemsArray];
}
Item *item = [[[items objectAtIndex:0]retain]autorelease];
[items removeObjectAtIndex:0];
return item;
}
-(void)buildItemsArray
{
// ...
[items addItem:someNewItem];
[items addItem:someOtherNewItem];
}
@end
我有一个返回项目的函数。如果项目下降到 0,则项目数组在 buildItemsArray 中再次构建。我的游戏逻辑要求当我返回一个项目时,我需要将它从数组中移除。因此,我使用了一个保留来确保该项目在返回行之前有效(因为唯一的其他已知保留发生在将该项目添加到项目数组时发生),并使用一个自动释放来确保它稍后被清理。我检查了这段代码既没有崩溃也没有泄漏。我怀疑是否:
a) 没关系 - 我问的原因是我主要看到了使用 alloc/init/autorelease 的代码,而没有遇到使用 retain/autorelease 的这种情况 b) 是否有一些理由改为使用 alloc/init/autorelease:
Item *item = [[Item alloc]initWithItem:[items objectAtIndex:0]autorelease];
谢谢