次のコードがあります。
@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 内でアイテム配列が再度構築されます。私のゲーム ロジックでは、アイテムを返すときに配列から削除する必要があります。そのため、retain を使用してアイテムが戻り行まで有効であることを確認し (アイテムが items 配列に追加されたときに他の唯一の既知の保持が発生したため)、後で確実にクリーンアップされるように autorelease を使用しています。このコードがクラッシュしたりリークしたりしないことを確認しました。かしら:
a) これで問題ありません - 私が質問する理由は、主に alloc/init/autorelease を使用するコードを見たことがあり、retain/autorelease を使用してこのケースに遭遇したことがないからです b) 代わりに alloc/init/autorelease を使用する理由はありますか?
Item *item = [[Item alloc]initWithItem:[items objectAtIndex:0]autorelease];
ありがとう