2010-11-25 7 views
0

私は付属のボタンがタップされたときにビューをロードするのUITableView持っている:ユーザーが特定のアクションを実行するとき、私はこれを行うことにより、バックのUITableViewに戻るには、ビュー内サブビューをアンロードする方法は?

MyView *newView = [[MyView alloc] ...]; 
[self.navigationController pushViewController:newView]; 

を:

[self.navigationController popViewControllerAnimated:YES]; 

これは機能しますが、次にアクセサリボタンをタップしてビューにアクセスすると、ビューが初めて使用されたときの値の一部が保持されます。

ビューを実際に「完全にアンロード」して次回の表示時にフレッシュになる適切な方法はありますか?

あなたが任意のviewDidUnload上のメインビューのサブビューを保持し解放する必要が

答えて

1

にnilにこれらを設定する必要がありますが、私があると仮定しnewViewを(autorelease必要があります実際にView Controllerはナビゲーションスタックにプッシュしているためです)。ビューコントローラは、(カウントを保持保持ナビゲーションスタックにプッシュさ

  • それが割り当てられている(カウント1を保持)
  • それは現在、あなたのビューコントローラは、割り当てを解除しないさんと漏洩している現状では2)それは、それを解放し、スタックからポップされ

  • は、(それがその
後に再び解放されることはありません
  • 数1)を保持します

    以前の値を取得している理由については、同じインスタンスをスタックにプッシュするたびに新しいインスタンスを作成するのではなく、同じインスタンスをプッシュする必要があります。関連するすべてのインスタンスをまだ投稿していないので、コード。

  • 0

    ...例えば

    あなたはIBでの店舗として、それらを宣言することによって、UI要素を保持している場合は、にdeallocでそれらを解放する前にゼロに設定します。ここで

    は例です:

    @interface ...

    { 
        IBOutlet UIButton *button; 
        IBOutlet UITextLabel *label; 
        IBOutlet UITableView *tableview; 
    } 
    
    @property (nonatomic, retain) UIButton *button; 
    ... 
    

    次にあなたがviewDidUnload

    - (void)viewDidUnload { 
        self.button = nil; 
        self.textlabel = nil; 
        self.tableview = nil; 
        ... 
    } 
    
    関連する問題