客观c中的悬空指针 - 也会释放内存吗?

Ces*_*scy 8 pointers objective-c automatic-ref-counting

我的理解是:

当内存未被释放或"释放"时发生内存泄漏当指针未设置为nil且对象被释放时,会发生悬空指针.

我的问题是:可以将对象设置为nil释放内存并清除指针引用吗?

Car *myCar = [[Car alloc] initWithCoolRims: YES];
myCar = nil;
//no mem leaks or dang pointers
Run Code Online (Sandbox Code Playgroud)

或ARC是否这样做:

Car *myCar = [[Car alloc] initWithCoolRims: YES];
[myCar release];    
myCar = nil;
//no mem leaks or dang pointers
Run Code Online (Sandbox Code Playgroud)

谢谢

Pau*_*l.s 10

ARC下

对于您的第一个示例myCar将设置为nil,并且新创建的Car将在某个时候取消分配.这是因为myCar唯一能引用新创建的东西Car.

如果别的东西产生了浓厚的指针到新创建Car那么这只会nilmyCar的参考和其他有兴趣的引用将确定的寿命Car实例

非ARC下

人们还是这样吗?

你的第一个例子确实是内存泄漏 - 你已经丢失了指向你的新Car实例的唯一指针而没有从中减少+1引用alloc.

  • 重要的是要注意,这只适用于ARC. (3认同)