UIPopover发布iOS

时间:2012-04-19 11:58:47

标签: ios uipopovercontroller

我有@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?

1 个答案:

答案 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:)