1

在iOS 的MRC中,当一个对象设置为 nil 时,

myObject = nil; 

据说会发生内存泄漏,因为 myObject 不会指向内存地址。它之前指向的记忆将会丢失。所以我们需要释放myObject,然后我们才能设置nil。有人可以帮助我理解,如果我们在 ARC 中将 nil 设置为 myObject 会发生什么?如果我们有这样的事情

myObject = SomeObject(value:10);
SomeObject myObject_another = myObject;
myObject = nil;
  1. [myObject release]当我们设置ARC 会调用myObject = nil吗?
  2. 这会导致内存泄漏吗?
  3. [myObject_another release]当我们设置时它也会调用myObject = nil吗?

请帮助我了解 ARC 和非 ARC 之间的区别。

4

1 回答 1

2

您可以认为每次创建/销毁(或重新分配)新引用时,编译器都会插入保留/释放。所以它看起来像:

myObject = SomeObject(value:10); /// Memory allocated and ref count increased. 
SomeObject myObject_another = myObject; /// ref count increased (now 2). 
myObject = nil; /// Reassigning -> ref count decreased. SomeObject still alive.
...
/// When myObject_another is destroyed or reassigned ref count will be decreased. It's 0 now -> memory deallocated. 
  1. 是的。发布调用:引用计数减少。内存未释放。
  2. 这里没有内存泄漏。
  3. 不。对象仍然存在,可以通过 myObject_another 访问。

苹果文章: https ://developer.apple.com/library/archive/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226

于 2020-01-27T06:01:32.943 回答