mk1*_*k12 28 null cocoa-touch release properties objective-c
我已经知道dealloc你在做([object release];但在viewDidUnloadUIViewController子类中)你做了self.object = nil.真正的区别是因为self.object = nil(我们假设对象是(nonatomic, retain)属性)保留nil(什么也不做)然后释放旧值然后引用计数为0对吗?
smo*_*gan 54
self.object = nil调用你的setter,它将释放旧值,设置成员nil,并可能做其他事情(这是一个方法,所以它可以做任何事情)."任何"的一部分是有潜在危险的; 例如,看到这个问题.
[object release]释放旧值,但将成员留作现在悬挂的指针,这是一个很好的错误配方.在dealloc这并不重要,因为指针本身即将消失过,但在任何其他情况下,这是一个非常糟糕的主意,释放一员,而不将其设置为nil.
(作为旁注,你永远不应该假设释放一个对象给它一个引用计数为0.它会释放你的引用,但是其他对象可能仍然引用它.)
如果object = nil没有[object release],可能会导致内存泄漏.如果你[object release]没有object = nil事后没有,对象变成了@Jim建议的悬空指针.self.object = nil是一个用于setter函数调用的糖.
| 归档时间: |
|
| 查看次数: |
13655 次 |
| 最近记录: |