0

我有@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;
}

我的问题:在这种方法中释放 popover 的正确方法。或者我必须只在 dealloc 方法中释放 popover?

4

1 回答 1

1
self.popoverController=nil;

调用 setter。鉴于您的属性被声明为保留,这将释放先前的值并保留新的值(在这种情况下,它保留 nil 什么都不做)。

[popoverController release];

在 popoverController 上调用 release 现在是 nil ,它什么都不做。但是你不应该这样做,如果它不是 nil 它将被过度释放(因为下一次你设置 popoverController 属性时也会调用 release )。

你设置属性的时候也有问题

UIPopoverController *tempPopover = [[UIPopoverController alloc] initWithContentViewController:tempNavigation];
self.popoverController = tempPopover;

设置器保留该值,因此您应该自动释放它

self.popoverController = [tempPopover autorelease];

你应该使用ARC :)

于 2012-04-19T12:17:05.287 回答