2012-04-19 13 views
0

私は@property(nonatomic,retain) UIPopoverController * popoverController;UIPopoverリリースiOS

私の実装クラスで私のpopoverを作成します。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    if (popoverController) { 
     [popoverController dismissPopoverAnimated:NO]; 
     self.popoverController=nil; 
     [popoverController release]; 
    } 
    return YES; 
} 

私の質問:この中にポップオーバーを解放するには、この正しい方法私は私のポップオーバー、私はこれを使用

を解放する必要があり、この方法では

- (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]; 
} 

私はこれを使用します方法。または、私はdeallocメソッドでのみpopoverを解放する必要がありますか?

+0

あなたがすることができます再度アクセスまたは解放しようとしない限り、保持された/割り当てられたオブジェクトをどこにでも解放します。だからこれは良いです – Lefteris

+0

まず、プロパティをNilに設定して、インスタンス変数を解放します。どちらも効果的にポップオーバーを解放するため、どちらか一方を削除することができます – Till

答えて

1
self.popoverController=nil; 

はセッターを呼び出します。あなたのプロパティがretainとして宣言されている場合、これは以前の値を解放し、新しい値を保持します(この場合、何もしないnilを保持します)。

[popoverController release]; 

これは何もしないnilのpopoverControllerを呼び出します。ただし、それがリリースされない場合は、リリースしないでください(releaseがpopoverControllerプロパティを次に設定するときに呼び出されるため)。

また、あなたは財産

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

を設定するとき、あなたはそれを

self.popoverController = [tempPopover autorelease]; 

を自動解放すべきであるそして、あなたはARCを使用する必要がありますので、セッターが値を保持し、問題を持っている:)

+0

ありがとうございます!すべてがクリアです! –

関連する問題