ary*_*axt 2 memory-management objective-c
以下代码应该在“手动引用计数”下崩溃,因为数组内的对象被释放两次。为什么它不会崩溃?
NSMutableArray *array = [NSMutableArray array];
[array addObject:@"1"];
[array addObject:@"2"];
[array addObject:@"3"];
for (int i=array.count-1 ; i>= 0 ; i--)
{
id object = [array objectAtIndex:i];
[object release];
[array removeObject:object];
}
Run Code Online (Sandbox Code Playgroud)
为什么它不会崩溃?
因为所讨论的对象是对象文字,它们的处理方式有些不同。基本上,此类对象永远不会被释放。有关完整说明,请参阅Objective C NSString* 属性保留计数奇数。
如果您像这样更改第二行:
[array addObject:[stringWithFormat:@"1"]];
Run Code Online (Sandbox Code Playgroud)
您应该会看到您期望的崩溃,因为数组中的第一项不是字符串常量,而是受通常引用计数规则约束的常规旧动态分配字符串。
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |