【发布时间】:2010-07-23 03:38:10
【问题描述】:
我想问一下关于iPhone应用程序和Objective C的问题。在实现程序中,有一个叫做'dealloc'的函数,这个函数是不是只能被应用调用一次呢?
例如,如果我分配一个对象并保留它 2 次,则保留计数为 2,并且我从不在程序中使用“释放”,除非在 dealloc 中。将对象从内存中删除,还是将目标从内存中删除。谢谢。
【问题讨论】:
标签: objective-c
我想问一下关于iPhone应用程序和Objective C的问题。在实现程序中,有一个叫做'dealloc'的函数,这个函数是不是只能被应用调用一次呢?
例如,如果我分配一个对象并保留它 2 次,则保留计数为 2,并且我从不在程序中使用“释放”,除非在 dealloc 中。将对象从内存中删除,还是将目标从内存中删除。谢谢。
【问题讨论】:
标签: objective-c
在实现程序中,有一个叫做'dealloc'的函数,这个函数是不是只能被应用调用一次?
是的。 -dealloc 销毁对象。尝试再次向其发送任何消息,包括 -dealloc 是错误的。
如果我分配一个对象并保留它 2 次,则保留计数为 2
小心。保留计数是至少 3。除您的代码之外的其他内容可能会保留该对象。最好不要太担心保留数量,而只考虑所有权。
每个分配、新建、复制或保留都是所有权声明。只有在放弃所有所有权声明时,才会调用对象的 dealloc 方法。通过发送-release 放弃所有权声明。所以如果你从不释放一个对象,除了它自己的 dealloc,你永远不会释放它。
【讨论】:
dealloc 在对象被销毁时(当它的引用计数达到 0 时)被系统调用一次。如果你的类中有成员变量,你在 init 函数中 alloc,你必须在 dealloc 函数中 release 它们。
如果你给某人一个指向这些成员对象之一的指针并且他们retain 它,则该成员可以在你的dealloc 中的release 中幸存下来,但是通过发送retain 消息,他们将负责发送稍后发送release 消息,确保最终销毁。
【讨论】: