Rod*_*igo 1 cocoa-touch objective-c
我创建了一个使用相机解码条形码的对象.如果成功,它会向下一个动作发送委托消息,如果没有,它只会消失,下一个屏幕开始工作.
如果我在对象的最后一个命令中,我可以发送[自我释放]来释放内存吗?但是,问题是:retainCount可以多于一个?
喜欢
ObjectToDealloc *test = [[ObjectToDealloc alloc] init];
[test doYourJob];
//can't release here, it broke my program
Run Code Online (Sandbox Code Playgroud)
在这个对象做的最后一件事,它运行:
-(void)destroyYourself {
[self release];
[self dealloc];
}
Run Code Online (Sandbox Code Playgroud)
这会有用吗?我会释放记忆吗?或者我必须在全局可见性(不仅是功能可见性)中进行"测试"并执行以下操作:
[test release];
Run Code Online (Sandbox Code Playgroud)
这不是正确的内存管理.有少数情况[self release]是正确的.没有任何情况[self dealloc]是正确的(dealloc除了你自己的超类之外,你永远不应该打电话给任何人dealloc).
当你说"它打破了我的程序"时,你的意思是什么?是否ObjectToDealloc执行某种后台处理?如果没有,那么您应该始终能够在您指示的位置释放它.如果它确实进行后台处理,那么你需要一些东西来保留对象,直到它完成,然后释放它.每隔一段时间,最好的方法是保留和释放self,但通常你还有一些其他的东西就像是NSOperationQueue等等.
这里更可能的问题是你正在错误地处理内存管理,ObjectToDealloc并且当它解除分配它崩溃时.什么是撞车?
要记住的关键是你永远不会在ObjC中说"现在就破坏这个物体".你说"我已经完成了这个对象." 当每个人都完成对象后,它就会被运行时销毁.
在某些情况下,我看到了自我保留的类,以便在他们执行工作之前保持自己. 永远,永远,永远打电话给DEALLOC*. Dealloc不适合你,而是运行时.如果您不再需要对象,只需适当地释放它.调用该方法只是运行时的职责.
下面是我经常使用的一些代码的示例,其中对象保留自身,然后在完成其工作时适当地释放自身: UIAlertView + Blocks 此代码执行此操作,因为该对象被认为是固定的,即使它已被实例化类,以便它可以运行并完成给它执行的块.
*除非在你自己的dealloc中调用你的超级dealloc,但这不言而喻.
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |