使用nil值调用property的setter方法

时间:2010-07-10 16:01:39

标签: iphone memory memory-management

考虑我有一个名为sampleObject的属性。

在dealloc方法中,哪个应该是管理内存的最佳方法?

选项1:

self.sampleObject = nil; //This will release the sampleObject and set it to nil

这相当于

[sampleObject release];

sampleObject = nil;

选项2:

显式释放对象并将其设置为nil

[sampleObject release];

sampleObject = nil;

在我看来,两者都能达到同样的效果吗?请分享您的观点。

此致 克里希南

3 个答案:

答案 0 :(得分:2)

在'dealloc'方法中,你应该直接“释放”ivar并将其设置为nil。

您可以直接执行此操作,因为这样可以避免执行子类中可能存在的任何自定义setter代码。

设置为nil并不是绝对必要的,但它几乎无需任何操作,你会很高兴你在调试过程中这样做,它消除了一个悬空指针。

答案 1 :(得分:1)

在dealloc方法中,该类永远不会再次使用,因此不需要将保留的资源/属性设置为nil。发送版本是最佳选择,可以避免不必要的代码。

答案 2 :(得分:1)

通过属性setter确实比直接发送release消息的开销小。因此,对于合成属性,最好发送release

当然,如果setter逻辑更复杂,有些情况下你必须调用属性setter(例如,属性由多个变量支持,setter分解值并清理旧值)。但这并不是常见的情况。

由于您要释放对象,因此在释放后无需将支持变量明确设置为nil