2012-04-19 61 views
0

我有@property(nonatomic,retain) UIPopoverController * popoverController;UIPopover發佈iOS

我在我的實現類中創建了彈出窗口。

我用這個:

- (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方法中釋放popover?

+0

你可以只要您不嘗試訪問或再次發佈,就可以在任何地方釋放保留/分配的對象。所以這很好 – Lefteris 2012-04-19 12:04:11

+0

首先你將屬性設置爲零,然後你釋放實例變量 - 兩者都將有效釋放彈出窗口,因此你可以刪除一個或另一個 – Till 2012-04-19 12:07:00

回答

1
self.popoverController=nil; 

調用setter。鑑於你的財產被宣佈爲保留,這將釋放以前的價值,並保留新的(在這種情況下,它保留零,無所事事)。

[popoverController release]; 

對popoverController的調用釋放,它現在是nil,它什麼都不做。但是你不應該這樣做,如果它不是零,它會被釋放(因爲下次你設置popoverController屬性時會釋放它)。

你也有一個問題,當你設置該屬性

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

二傳手保留值,所以你應該自動釋放它

self.popoverController = [tempPopover autorelease]; 

而且你應該使用ARC :)

+0

謝謝!一切都很清楚! – 2012-04-19 12:30:08