我有以下代码:可以同时保留和自动释放吗?
@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中。我的游戏逻辑要求当我返回一个项目时,我需要将它从数组中移除。因此,我使用了一个保留来确保该项目在返回行之前是有效的(因为当项目被添加到items数组时,发生了唯一的其他已知保留),以及确保稍后清理它的自动释放。我已经检查过这个代码既没有崩溃也没有泄漏。我想知道是否:
a)这是好的 - 我问的原因是,我主要看到代码与alloc/init/autorelease,并没有遇到这种情况与保留/ autorelease b)有一些理由分配/初始化/自动释放,而不是:
Item *item = [[Item alloc]initWithItem:[items objectAtIndex:0]autorelease];
感谢
这是不好的,因为在这个时代你应该使用ARC,并且不会有这个问题开始。只是说'':) – LearnCocos2D 2013-03-03 20:39:53
同意使用ARC那些日子,但对于学习,我认为这是必不可少的了解这是如何工作的。 – Ultrakorne 2013-03-04 00:37:24
我们打算使用ARC,但是想在修复之前修复现有的泄漏,以便我们了解它是如何工作的。 – Anand 2013-03-04 01:46:36