在iPhone中保留计数和dealloc

时间:2010-07-23 03:38:10

标签: objective-c

我想问一下iPhone应用程序和目标C问题。在实现程序中,有一个名为'dealloc'的函数,该函数只能被应用程序调用一次吗?

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

2 个答案:

答案 0 :(得分:1)

当对象被销毁时(当引用计数达到0时),系统会调用

dealloc一次。如果您的班级中的成员变量是alloc函数中的init,则必须在release函数中dealloc

如果你给某人一个指向其中一个成员对象的指针而他们retain,那么该成员可以在release dealloc中生存,但是发送retain消息他们负责稍后发送release消息,确保其最终被破坏。

答案 1 :(得分:1)

  

在实现程序中,有一个名为'dealloc'的函数,该函数只能被应用程序调用一次吗?

是。 -dealloc会破坏对象。尝试再次向其发送任何消息,包括-dealloc是一个错误。

  

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

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

每个alloc,new,copy或retain都是所有权声明。只有在放弃所有所有权声明后,才会调用对象的dealloc方法。通过发送-release放弃所有权声明。所以如果你永远不会释放一个对象,除了它自己的dealloc,你永远不会释放它。