我想问一下iPhone应用程序和目标C问题。在实现程序中,有一个名为'dealloc'的函数,该函数只能被应用程序调用一次吗?
例如,如果我分配一个对象并保留它2次,则保留计数为2,并且我从不在程序中使用“release”,除非在dealloc中。是否将对象从内存中删除,否则目标将从内存中删除。谢谢。
答案 0 :(得分:1)
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,你永远不会释放它。