我有以下代碼:可以同時保留和自動釋放嗎?
@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