我制作了一个物体,用相机来解码条形码。如果成功,它会向下一个动作发送一个委托消息,如果不成功,它只会退出,下一个屏幕开始工作。
如果我在对象的最后一个命令中,我可以发送self release来释放内存吗?但是,问题是: retainCount可以有多个吗?
喜欢
ObjectToDealloc *test = [[ObjectToDealloc alloc] init];
[test doYourJob];
//can't release here, it broke my program在这个对象做的最后一件事中,它运行:
-(void)destroyYourself {
[self release];
[self dealloc];
}这样行得通吗?我会释放内存吗?或者,我必须在全局可见性(不仅仅是函数可见性)中进行“测试”,并执行以下操作:
[test release];发布于 2011-06-02 03:40:01
有几个例子,我看到一些类保留自己,以便保持自己,直到它们执行工作。 Dealloc不是给你用的,而是运行时用的。如果不再需要某个对象,只需适当地释放它即可。调用该方法只是运行库的职责。
下面是我经常使用的一些代码的示例,其中对象保留自己,然后在完成工作后适当地释放自己:UIAlertView+Blocks此代码之所以这样做,是因为对象应该留在原处,即使它已经被实例化类释放,以便它可以运行并完成指定要执行的块。
*除非在你自己的dealloc中调用你的超级dealloc,但这是不言而喻的。
发布于 2011-06-02 03:42:16
这不是正确的内存管理。在少数情况下,[self release]是正确的。没有[self dealloc]是正确的(你永远不应该调用任何人的dealloc,除非你的超类在你自己的dealloc中)。
当你在上面说“它破坏了我的程序”,你是什么意思?ObjectToDealloc是否执行某种类型的后台处理?如果没有,那么您应该始终能够在您指定的点上释放它。如果它确实做了后台处理,那么你需要一些东西来保留对象,直到它完成,然后释放它。有时候,最好的方法是保留和释放self,但通常你需要做一些其他的事情,比如NSOperationQueue或类似的东西。
这里更有可能的问题是,您在ObjectToDealloc中没有正确地处理内存管理,并且当它释放内存时,它会崩溃。崩溃原因是什么?
要记住的关键一点是,在ObjC中永远不要说“立即销毁这个对象”。你可以说“我已经完成了这个对象。”当每个人都处理完这个对象时,它就会被运行时销毁。
https://stackoverflow.com/questions/6206650
复制相似问题