在非 ARC Objective C 环境中,我理解为什么我们必须释放一个对象:释放为其分配的内存;我理解为什么我们之后必须将它设置为 nil(如果我们确定没有其他东西需要该实例/没有其他东西仍然保留该对象):以避免悬空指针。
但是我的问题是,如果所有对象都释放了对一个对象的保留,例如“carInstance”,导致其引用计数下降到 0,为什么哦,为什么 Not automatically make it nil?
如果引用计数现在为 0,对象是否仍然可用?或者这只是我们必须做的事情之一,因为这就是没有垃圾收集的方式(不可能,一定有原因)
最佳答案
简单的答案是在 ARC 之前使用的手动内存管理模型是轻量级和简单的。您希望的行为是您在 ARC 下使用 weak
指针获得的行为;并且它需要操作系统进行额外的工作,以跟踪弱指针并在回收对象时将其清除。显然,这是可行的,但在 Apple 已经推出实现 ARC 的额外工作之前,人们认为实现它的成本以及计算开销是不值得的。
对象被释放后,悬挂指针比无用更糟糕:它是彻头彻尾的危险。在它指向未分配的内存时引用它会产生异常;在它被随机重新分配给另一个对象或一些其他内存分配后引用它通常会产生“对象不响应选择器”错误。
关于ios - 为什么一个对象在其引用计数变为 0 时不会自动设置为 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23643799/