Ben*_*tto 14 iphone uiviewcontroller uiactionsheet uipopovercontroller
我对以下实例所需的对象所有权模式有些不清楚.当我的UIViewController将弹出控制器,操作表或其他视图控制器呈现为模态时,我是否需要挂起对该子控制器的保留引用,直到它被解除为止?
换句话说,以下几行代码是否有效地"转移"了所有权?
[aPopoverController presentPopoverFromBarButtonItem:someButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];
[anActionSheet showFromBarButtonItem:someButtonItem animated:NO];
[aViewController presentModalViewController:someOtherViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
有人能指出我关于这个主题的明确文件吗?
val*_*ine 26
UIPopoverViewController具有略微不同的内存管理/拥有.呈现弹出窗口不会保留内存,因此您无法将popviewcontroller的所有权转移到呈现对象.
为避免内存泄漏,您必须采用UIPopoverControllerDelegate并实现DidDismissPopOver方法,如下所示:
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
[popoverController release];
}
Run Code Online (Sandbox Code Playgroud)
这样,您可以安全地分配和呈现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];
}
Run Code Online (Sandbox Code Playgroud)