我有@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];
}
在这个方法中我需要释放我的popover
我用这个:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if (popoverController) {
[popoverController dismissPopoverAnimated:NO];
self.popoverController=nil;
[popoverController release];
}
return YES;
}
我的问题:在这种方法中发布popover的正确方法。或者我只能在dealloc方法中释放popover?
答案 0 :(得分:1)
self.popoverController=nil;
调用setter。鉴于您的属性被声明为retain,这将释放先前的值并保留新值(在这种情况下,它保留nil,什么都不做)。
[popoverController release];
在popoverController上调用release,现在为nil,什么都不做。但是你不应该这样做,如果它不是nil就会过度释放(因为下次你设置popoverController属性时也会调用它)。
设置属性
时也遇到问题UIPopoverController *tempPopover = [[UIPopoverController alloc] initWithContentViewController:tempNavigation];
self.popoverController = tempPopover;
setter保留值,因此你应该自动释放它
self.popoverController = [tempPopover autorelease];
你应该使用ARC:)