【发布时间】:2014-01-01 21:04:41
【问题描述】:
我的理解是:
内存未释放或“释放”时会发生内存泄漏 当指针未设置为 nil 并且对象被释放时,就会出现悬空指针。
我的问题是:可以将对象设置为 nil 释放内存并清除指针引用吗?
即
Car *myCar = [[Car alloc] initWithCoolRims: YES];
myCar = nil;
//no mem leaks or dang pointers
或者 ARC 是否这样做:
Car *myCar = [[Car alloc] initWithCoolRims: YES];
[myCar release];
myCar = nil;
//no mem leaks or dang pointers
谢谢
【问题讨论】:
-
afaik,
myCar = nil;不会导致内存被释放(引用计数不变),所以在第一种情况下你有一个内存泄漏。在第二种情况下,没有内存泄漏,并且通过 nil-lifyingmyCar您避免了 dang ptrs(前提是您在使用它之前检查它 ptr 是 nil ......) -
您的问题是“ARC 是否执行此操作”或“我必须手动执行此操作”吗?两个“无内存泄漏”的 cmets 相互矛盾。
-
@ShinTakezou 在 ARC 下,将
__strong指针设置为nil会导致指向的对象为- released。 -
@H2CO3 有趣;我不记得
Car *myCar是强ptr 还是弱ptr,没有明确说明;我想答案是默认是强然后 -
@ShinTakezou:除非另有标记,否则对象指针是强引用。如果不是这样,ARC 有权在您有机会使用它之前解除分配该对象。
标签: objective-c pointers automatic-ref-counting