UIPopoverController、UIActionSheet 和模态视图控制器的保留/释放模式? [英] Retain/release pattern for UIPopoverController, UIActionSheet, and modal view controllers?
问题描述
我不太清楚以下实例所需的对象所有权模式.当我的 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屋!