为什么当引用计数变为0时,对象不会自动设置为nil?

时间:2014-05-14 00:34:07

标签: ios automatic-ref-counting release reference-counting

在非ARC Objective C环境中,我理解为什么必须释放一个对象:释放为其分配的内存;我明白为什么我们之后必须将它设置为nil(如果我们确定没有其他东西需要实例/其他任何东西仍然保持对象):避免悬空指针。

然而我的问题是,如果所有对象释放对象的持有,例如“carInstance”,导致其引用计数降至0,为什么为什么这不会自动使其为零?

如果引用计数现在为0,那么对象是否仍可以以任何方式使用?或者这只是我们必须要做的事情之一,因为那就是没有垃圾收集工作(不可能,必须有原因)

1 个答案:

答案 0 :(得分:1)

简单的答案是,ARC之前使用的手动内存管理模型轻巧而简单。您希望的行为是您在ARC下使用weak指针获得的行为;它需要操作系统的额外工作,以跟踪弱指针,并在回收对象时将它们取出。显而易见,这是可行的,但实施它的成本以及计算开销在Apple已经推出实施ARC的额外工作之前并不值得。

在一个对象被释放后,悬空指针更糟而不是无用:它是彻头彻尾的危险。在指向未分配的内存时引用它会产生异常;在将其随机重新分配给另一个对象或其他内存分配后引用它通常会产生“对象不响应选择器”错误。