因为对具有不同对象的变量的每次赋值都会增加其保留计数,而在dealloc中,并不总是清楚变量被赋值的频率[maVar release]可能不够充分。因此,使用ALWAYS myVar = nil
将保留计数设置为零,后续[myVar release]
将永远不会再导致问题。 (它实际上仍然需要吗?)
不这样做的唯一情况是,如果myVar传递给OUT,那么我不能这样做,因为myVar = nil
会破坏该值;
我的想法是否正确?或者这种避免泄漏的方式是否会导致其他任何问题?
答案 0 :(得分:3)
你的想法在很多方面都是错误的。这些可能只是表面上的问题:
dealloc
被称为。myVar = nil
不会影响保留计数。myVar = nil
仅销毁本地指针值,它不会销毁已传出的对象。[myVar release]
为myVar
时,可以安全地致电nil
,但它无用 - 它什么都不做。很明显,你对C指针和Objective-C内存管理的掌握有点缺乏。我建议在几次彻底重新读取Memory Management docs之前做一些补救 C 工作。
答案 1 :(得分:1)
请阅读Memory Management上的Apple文档。
分配指向对象的指针不会增加retain
计数,只调用retain
就可以了。名称中带有Copy或Init的函数应该返回一个保留计数为1的对象,其他函数应该返回自动释放的对象,这些对象将在主循环结束时被释放。
将对象设置为nil
不会修改保留计数,但会导致该内存泄漏。在那一点上对指针调用release
基本上什么都不做。如果您想有效管理内存使用情况,则需要对使用retain
,release
,autorelease
以及如何命名功能负责。