2011-05-25 10 views
0

私はUIPopoverControllerでalloc/initを実行してから、デリゲートメソッドで解放します。 「ビルドと分析」を実行するたびに、「潜在的なリーク」を伴うメモリ警告が表示されます。何か間違っているのですか、それともその警告を取り除く方法がありますか?UIPopoverControllerおよびdelegate-methodでのリリース。 "潜在的なメモリリーク"

ありがとうございます!

- (void) somewhere { 
    MyViewController *vc = [[MyViewController alloc] init]; 
    UIPopoverController *popover=[[UIPopoverController alloc] initWithContentViewController:vc]; 
    [vc release]; 

    // show the popover 
    [popover presentPopoverFromRect:[cell frame] inView:self.tableView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    popover.delegate = self; 
} 

- (void) popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { 
    [popoverController release]; 
    popoverController = nil; 
} 

EDIT:それはフレームワークによってリリースされますので、あなたはは、popoverControllerインスタンスを解放してはならないpopoverControllerDidDismissPopover:方法でショー完全どこかに、機能のすべての

答えて

0

まず、。

次に、somewhereメソッドの意味は?あなたはこのような何かを行う必要がありますので、あなたは...私はあなたがポップオーバービューを表示しているとし、ここでは完全な実装を投稿する必要があります

- (void) somewhere { 

    // I suppose you have a local variable to hold the controller 
    _myPopover = [[UIPopoverController alloc] initWithContentViewController:vc]; 
    _myPopover .delegate = self; 

    // ... do other things to configure the popover, if necessary 

    // I suppose you show it, with something like this 
    [_myPopover presentPopoverFromRect:yourRect inView:yourView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
} 

を次に、あなたはもはやポップオーバーコントローラを必要としないとき、あなたはそれを解放することができます。あなたは、あなたのコードでこの方法を試すことができます:

- (void) popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { 
    [_myPopover release]; 
    _myPopover = nil; 
} 

あなたは常にあなたがそれを必要とポップオーバーのインスタンスを保持し、あなたがそれを完了したときにそれを解放します。この道を。以前の実装では、インスタンスは何にも束縛されていませんでした。

+0

残念ながら、それは動作しません。そこにUIPopoverController( "popover")を解放してはいけません。 – swalkner

+0

あなたのクラスに 'popover'インスタンスをローカルに保存していない場合、あなたはもうそれを必要としません。 'どこか 'のソースコード全体を投稿してください。 – marzapower

+0

私はまだ同意しません。私がそこにリリースを置くと、アプリケーションがクラッシュします。他のSO質問から: "UIPopoverControllerはわずかに異なるメモリ管理/所有を持っています。ポップオーバーはメモリを保持していないので、popviewcontrollerの所有権を提示オブジェクトに転送することはできません。 – swalkner

関連する問題