我有@property(nonatomic,retain) UIPopoverController * popoverController;
我在我的实现类中创建了我的popover。
我使用的是:
- (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;
}我的问题是:在这个方法中释放popover的正确方式。或者我必须只在dealloc方法中释放popover?
发布于 2012-04-19 20:17:05
self.popoverController=nil;调用setter。如果你的属性被声明为retain,这将释放之前的值并保留新的值(在本例中,它保留nil,不做任何事情)。
[popoverController release];在popoverController上调用release,它现在是空的,不做任何事情。但是,您不应该这样做,如果它不是空的,它将被过度释放(因为下次设置popoverController属性时,也会在它上调用release )。
在设置该属性时也会出现问题
UIPopoverController *tempPopover = [[UIPopoverController alloc] initWithContentViewController:tempNavigation];
self.popoverController = tempPopover;setter会保留该值,因此您应该自动释放它
self.popoverController = [tempPopover autorelease];并且您应该使用ARC :)
https://stackoverflow.com/questions/10227560
复制相似问题