【发布时间】:2015-04-07 07:46:04
【问题描述】:
当我阅读guide 时,我对 object-c 中的手动内存管理有疑问。
为了让问题更清楚,我在下面粘贴了让我感到困惑的代码:
// CarStore.m
- (void)setInventory:(NSMutableArray *)newInventory {
if (_inventory == newInventory) {
return;
}
NSMutableArray *oldValue = _inventory;
_inventory = [newInventory retain];
[oldValue release];
}
我认为上面的代码做了重复操作:
// CarStore.m
- (void)setInventory:(NSMutableArray *)newInventory {
// if we can ensure '_inventory' is different with 'newInventory'
if (_inventory == newInventory) {
return;
}
// we can release '_inventory' firstly and safely
[_inventory release];
_inventory = [newInventory retain];
}
还有
// CarStore.m
- (void)setInventory:(NSMutableArray *)newInventory {
// if we don't check the equal between '_inventory' and 'newInventory' firstly
// then we need temp '_inventory', since '_inventory' and 'newInventory' maybe the same object
NSMutableArray *oldValue = _inventory;
_inventory = [newInventory retain];
[oldValue release];
}
我不确定我的想法是否有一些错误,所以请帮帮我。
【问题讨论】:
标签: objective-c properties release retain reference-counting