我有@property(nonatomic,retain) UIPopoverController * popoverController;
我在实现类中创建了弹出窗口。
我用这个:
- (void)createPopover:(NavigationController *)tempNavigation {
UIPopoverController *tempPopover = [[UIPopoverController alloc] initWithContentViewController:tempNavigation];
self.popoverController = tempPopover;
[self.popoverController setPopoverContentSize:CGSizeMake(width, height)];
tempPopover.delegate = self;
CGRect selectedRect = [self.tableView rectForRowAtIndexPath:indexPath];
[tempPopover presentPopoverFromRect:selectedRect inView:self.tableView permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
[tempPopover release];
}
在这个方法中我需要释放我的弹出窗口
我用这个:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if (popoverController) {
[popoverController dismissPopoverAnimated:NO];
self.popoverController=nil;
[popoverController release];
}
return YES;
}
我的问题:在此方法中释放弹出窗口的正确方法。或者我必须仅在 dealloc 方法中释放弹出窗口?
最佳答案
self.popoverController=nil;
调用 setter 。鉴于您的属性被声明为保留,这将释放以前的值并保留新的值(在这种情况下,它保留 nil,不执行任何操作)。
[popoverController release];
在 popoverController 上调用release,现在它是nil,什么也不做。但是你不应该这样做,如果它不是 nil,它就会被过度释放(因为下次设置 popoverController 属性时也会调用release)。
你设置属性的时候也有问题
UIPopoverController *tempPopover = [[UIPopoverController alloc] initWithContentViewController:tempNavigation];
self.popoverController = tempPopover;
setter 保留该值,因此您应该自动释放它
self.popoverController = [tempPopover autorelease];
你应该使用 ARC :)
关于ios - UIPopover 发布 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10227560/