【问题标题】:Retain count and dealloc in iPhone在 iPhone 中保留计数和解除分配
【发布时间】:2010-07-23 03:38:10
【问题描述】:

我想问一下关于iPhone应用程序和Objective C的问题。在实现程序中,有一个叫做'dealloc'的函数,这个函数是不是只能被应用调用一次呢?

例如,如果我分配一个对象并保留它 2 次,则保留计数为 2,并且我从不在程序中使用“释放”,除非在 dealloc 中。将对象从内存中删除,还是将目标从内存中删除。谢谢。

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    在实现程序中,有一个叫做'dealloc'的函数,这个函数是不是只能被应用调用一次?

    是的。 -dealloc 销毁对象。尝试再次向其发送任何消息,包括 -dealloc 是错误的。

    如果我分配一个对象并保留它 2 次,则保留计数为 2

    小心。保留计数是至少 3。除您的代码之外的其他内容可能会保留该对象。最好不要太担心保留数量,而只考虑所有权。

    每个分配、新建、复制或保留都是所有权声明。只有在放弃所有所有权声明时,才会调用对象的 dealloc 方法。通过发送-release 放弃所有权声明。所以如果你从不释放一个对象,除了它自己的 dealloc,你永远不会释放它。

    【讨论】:

    • 如果你分配一个对象并保留它两次,那么引用计数至少为 3。它从 1 开始并递增两次。
    • @jasongetsdown:好地方。谢谢。我已经修改了我的帖子。
    【解决方案2】:

    dealloc 在对象被销毁时(当它的引用计数达到 0 时)被系统调用一次。如果你的类中有成员变量,你在 init 函数中 alloc,你必须在 dealloc 函数中 release 它们。

    如果你给某人一个指向这些成员对象之一的指针并且他们retain 它,则该成员可以在你的dealloc 中的release 中幸存下来,但是通过发送retain 消息,他们将负责发送稍后发送release 消息,确保最终销毁。

    【讨论】:

    • 感谢您的回复。如果我忘记设置释放,程序或对象的一些问题会留在内存中吗?谢谢。
    • 对象会留在内存中,这是个问题。
    猜你喜欢
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2011-04-05
    • 2023-03-15
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多