次のコード スニペットでは:
NSMutableArray *tmpItemsArray =[[[NSMutableArray alloc] init] autorelease];
while (sqlite3_step(fetch_statement)==SQLITE_ROW){
int pk = sqlite3_column_int(fetch_statement,0);
Item_A *itemA = [[Item_A alloc] getItemA:pk fromDatabase:db];
// calculate and set a property of itemA
[itemA setValue:xValue forkey:xKey];
// insert into array
[tmpItemsArray addObject:itemA];
[itemA release];
}
sqlite3_reset(fetch_statement);
// for each ItemA in array
// update itemA in database
for (Item_A *eachItemA in tmpItemsArray) {
[eachItemA updateItemAInDatabase:db];
}
addObject: メソッドを使用して tmpItemsArray にオブジェクトを追加すると、itemA が指すメモリ アドレスにあるオブジェクトが配列に追加されます。つまり、tmpItemsArray 内のオブジェクトは、ItemA が指すのと同じメモリ アドレスを指しています。
ここで[itemA release]を実行すると、メモリを解放する -
tmpItemsArray には無効なメモリを指すオブジェクトがありますか
また
[itemA release] は、itemA がこのメモリに対して保持している (ある意味で) のみを解放しますか?