考虑我有一个名为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;
在我看来,两者都能达到同样的效果吗?请分享您的观点。
此致 克里希南
答案 0 :(得分:2)
在'dealloc'方法中,你应该直接“释放”ivar并将其设置为nil。
您可以直接执行此操作,因为这样可以避免执行子类中可能存在的任何自定义setter代码。
设置为nil并不是绝对必要的,但它几乎无需任何操作,你会很高兴你在调试过程中这样做,它消除了一个悬空指针。
答案 1 :(得分:1)
在dealloc方法中,该类永远不会再次使用,因此不需要将保留的资源/属性设置为nil。发送版本是最佳选择,可以避免不必要的代码。
答案 2 :(得分:1)
通过属性setter确实比直接发送release
消息的开销小。因此,对于合成属性,最好发送release
。
当然,如果setter逻辑更复杂,有些情况下你必须调用属性setter(例如,属性由多个变量支持,setter分解值并清理旧值)。但这并不是常见的情况。
由于您要释放对象,因此在释放后无需将支持变量明确设置为nil
。