UIPopoverController、UIActionSheet 和模态视图控制器的保留/释放模式? [英] Retain/release pattern for UIPopoverController, UIActionSheet, and modal view controllers?

查看:14
本文介绍了UIPopoverController、UIActionSheet 和模态视图控制器的保留/释放模式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不太清楚以下实例所需的对象所有权模式.当我的 UIViewController 将弹出控制器、操作表或其他视图控制器呈现为模态时,我是否需要保留对该子控制器的引用直到它被解除?

I'm somewhat unclear on the object ownership patterns required for the following instances. When my UIViewController presents a popover controller, an action sheet, or another view controller as modal, am I required to hang onto a retained reference to that child controller until it's been dismissed?

换句话说,以下几行代码是否有效地转移"了所有权?

In other words, do the following lines of code effectively "transfer" ownership, or not?

[aPopoverController presentPopoverFromBarButtonItem:someButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];

[anActionSheet showFromBarButtonItem:someButtonItem animated:NO];

[aViewController presentModalViewController:someOtherViewController animated:YES];

有人可以向我指出有关此主题的明确文档吗?

Can someone point me to explicit documentation on this subject?

推荐答案

UIPopoverViewController 的内存管理/拥有略有不同.Present a popover 不保留内存,因此您无法将 popviewcontroller 的所有权转让给呈现对象.

UIPopoverViewController has a slight different memory management/owning. Present a popover does not retain the memory, so you can't transfer the ownership of your popviewcontroller to the presenting object.

为了避免内存泄漏,您必须采用 UIPopoverControllerDelegate 并实现如下 DidDismissPopOver 方法:

To avoid memory leak, you have to adopt the UIPopoverControllerDelegate and implement the DidDismissPopOver method as follow:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
    [popoverController release];
}

通过这种方式,您可以安全地分配并呈现一个 PopOver:

This way, you can safe alloc and present a PopOver:

-(void)showSearch:(id)sender {
    SearchViewController *searchVC = [[SearchViewController alloc] init];
    UIPopoverController *popVC = [[UIPopoverController alloc] initWithContentViewController:searchVC];
    popVC.delegate = self;
    [popVC setPopoverContentSize:CGSizeMake(320, 100)];
    [popVC presentPopoverFromRect:CGRectMake(200, 200, 320, 100) inView:self.view permittedArrowDirections:0 animated:YES];
    [searchVC release];
}

这篇关于UIPopoverController、UIActionSheet 和模态视图控制器的保留/释放模式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆