我认为这很简单,但我遇到了很大的问题。如何释放一个对象正在调用委托函数释放自己
我有2 UIViewController
,其中一个是“中央”控制器和其他是用于摄像头解码条码。
在中央UIViewController
,我打电话运行条码:
barCode = [[MyBarCode alloc] init]
[barCode openBarCodeReader];
//[barCode release]; //can't release it here, this cause problem with camera
} //function finish
的MyBarCode
对象将采取程序的控制。首先,它创建一个简单的视图的UIViewController
- (void) loadView {
UIView *frame = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[frame setBackgroundColor:[UIColor clearColor]];
self.view = frame;
}
不是启动和配置条形码的对象,并用
[self presentModalViewController:barCodeView animated:YES];
启动相机现在,一段时间后,我已经解雇该控制器
[barCodeView dismissModalViewControllerAnimated:YES];
我用代理功能发送数据,现在这个UIViewController
完成他们的工作,必须被释放。我试过一些:
发送另一个委托消息。但是,如果我在此代表,程序崩溃做
[barCode release];
,因为条码对象仍在运行,需要进入下一指令我可以发送
[self release]
但我不知道它是否工作,并在程序之后会在“中央”UIViewController
去。我可以关闭此AUX
UIViewController
与[self dismissModalViewControllerAnimated:NO];
但同样,当程序在中央
UIViewController
去。
有人有想法解决这个问题吗?
**编辑**
也许我找到了答案: 我不会打电话委托等的方法
[theDelegate BarCodeFinish];
但随着通知调用它。
[[NSNotificationCenter defaultCenter] postNotificationName:@"BarCodeFinish" object:nil];
拳头情况下,我仍然会运行调用之后的下一个代码,但在第二,呼叫将运行它完成它里面的功能之后,我也没有问题释放条码对象。这是最好的方法吗?
嗡嗡声..也许我写了一个错误。它看起来像一个C函数。我想要做的只是简单的:'result = [barCode openBarCodeReader]'然后'[条形码发布]'。我不能这样做,因为它会打开相机(并且我无法释放条形码,因为它在打开相机之前先到达此行)。当相机解码某些东西时,它会向条码对象发送一个功能。现在我想将它返回到中央视图(或中央对象,是相同的)。我使用委托来发送这些数据。 “中央”可以继续。但我必须发布条形码。如果我发布条形码,它会转到下一行,它会崩溃 – Rodrigo
我想我找到了解决方案。我可以发送'[[NSNotificationCenter defaultCenter] postNotificationName:@“BarCodeFinish”object:nil];'。这将运行在对象之外,我可以释放它。我不喜欢使用这种GOTO风格......但是,谢谢你的时间。 – Rodrigo
Rodrigo,是不是MyBarCode一种条形码包装类?或者它是一个自定义的UIViewController子类? 不是第二个视图控制器应该管理摄像机,而中央控制器管理第二个视图控制器并等待其解码某些东西。代理设计模式通常用于这种情况。如果'MyBarCode'是一个包装类,*不*让它设置相机,捕获代码......如果不是,你的'openBarCodeReader'应该做什么? – 2011-07-06 19:59:11