gpt4 book ai didi

objective-c - 如何释放一个对象是调用委托(delegate)函数来释放它自己

转载 作者:行者123 更新时间:2023-12-03 17:15:59 26 4
gpt4 key购买 nike

我认为这很简单,但我对此有很大的问题。

我有2个UIViewController,一个是“中央” Controller ,另一个用于使用相机解码条形码。

Central UIViewController中,我调用运行条形码:

   barCode = [[MyBarCode alloc] init]
[barCode openBarCodeReader];
//[barCode release]; //can't release it here, this cause problem with camera
} //function finish

MyBarCode 对象将控制程序。首先它创建一个 UIViewController 的简单 View

- (void) loadView {
UIView *frame = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[frame setBackgroundColor:[UIColor clearColor]];
self.view = frame;
}

然后启动并配置 BarCode 对象并使用

启动相机
[self presentModalViewController:barCodeView animated:YES];  

现在,过了一段时间,我必须关闭这个 Controller

[barCodeView dismissModalViewControllerAnimated:YES];

我使用委托(delegate)函数发送数据,现在这个 UIViewController 完成了它们的工作并且必须被释放。我尝试过一些事情:

  1. 发送另一条委托(delegate)消息。但是,如果我在这个委托(delegate)中执行 [barCode release]; ,程序就会崩溃,因为 barCode 对象仍在运行,需要转到下一条指令

  2. 我可以发送[self release],但我不知道它是否有效,以及程序将在“中央”UIViewController之后转到哪里它。

  3. 我可以用

    关闭这个辅助 UIViewController
    [self dismissModalViewControllerAnimated:NO];

    但是,程序在 Central UIViewController 中的位置。

有人有办法解决这个问题吗?

** 编辑 **

也许我找到了答案:我不会像方法一样调用委托(delegate)

[theDelegate BarCodeFinish];

但调用它时会发出通知。

[[NSNotificationCenter defaultCenter] postNotificationName:@"BarCodeFinish" object:nil];

第一种情况我仍然会在调用后运行下一个代码,但在第二种情况下,调用将在完成其内部的函数后运行,并且我可以毫无问题地释放条形码对象。这是最好的方法吗?

最佳答案

如果我理解控制程序的第二个 View Controller 是以模态方式呈现的,并且您正在寻找一种方法来关闭 View Controller 并释放条形码?

在我看来,这应该在委托(delegate)方法中完成。例如:

-(void)barCodeReader:(UIViewController *)aViewController didReadBarCode:(NSUInteger)theBarCode;

在第一个 View Controller 中编写该方法,然后将其设置为第二个 View Controller 的委托(delegate)。您甚至可以更好地编写自己的协议(protocol)...但是,一旦第二个 View Controller 读取了条形码,就调用您的自定义方法。实现它的方法应该是:

-(void)barCodeReader:(UIViewController *)aViewController
didReadBarCode:(NSUInteger)theBarCode {
// stop the bar code reader
[barCode release];
// dismiss the second view controller
// do something with theBarCode
}

一旦该方法返回,您的应用程序将在发送代码后等待下一个事件,可能是一些互联网提供的数据。

我使用 NSUInteger 作为参数,但您可以设置自己的类型。希望这会有所帮助。

关于objective-c - 如何释放一个对象是调用委托(delegate)函数来释放它自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6599683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com