在以下代码片段中:
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 对此内存的持有(以某种方式)?