代码之家  ›  专栏  ›  技术社区  ›  user387184

关于dealloc/release:x=nil总是可以的吗[x释放];-或者会引起问题吗?

  •  0
  • user387184  · 技术社区  · 16 年前

    由于每次分配给一个具有不同对象的变量都会增加其保留计数,而且在dealloc中,并不总是清楚一个变量被分配的频率简单的[maVar release]可能是不够的。所以总是使用 myVar = nil 将保留计数设置为零,然后 [myVar release] 再也不会引起问题了(实际上还需要吗?)

    唯一不这样做的情况是,如果myVar被传递出去,那么我就不能这样做,因为值被 myVar=无

    我的想法正确吗?或者这种避免泄漏的方法会导致其他问题吗?

    2 回复  |  直到 9 年前
        1
  •  3
  •   walkytalky    16 年前

    你的想法在很多方面都不正确。这些可能只是表面现象:

    • 变量赋值 没有 增加其保留计数(房产有一些微妙之处,但坦率地说,这远远超出了我们目前的水平。)
    • dealloc 被称为 当保留计数达到0时
    • 设置 myVar = nil 不影响保留计数
    • myVar=无 只销毁本地指针值,不销毁已传递的对象。
    • [myVar release] 什么时候 myVar nil
    • 担心保留计数 总是 一个错误。担心你所做的 .

    C级 重读 Memory Management docs

        2
  •  1
  •   Jose Ibanez    16 年前

    请阅读苹果的文档 Memory Management .

    将指针指定给对象不会增加 retain 计数,只打电话 是的。名称中包含Copy或Init的函数应返回retain count为1的对象,其他函数应返回自动释放的对象,这些对象将在主循环完成时释放。

    将对象设置为 nil 不会修改保留计数,但会导致内存泄漏。打电话 release 保持 autorelease ,以及如果要有效管理内存使用情况,如何命名函数。