2009-07-11 6 views
1
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { 
    AViewController * aView = [[AViewController alloc] initWithNibName:@"myNib" bundle:[NSBundle mainBundle]];  
    return vintagePriceRowView.view; 
} 

私はこのコードがリリースを必要としていることを知っています...どこか。しかしここで?割り当てられたAviewControllerをautoreleaseに設定した場合、ビュー内の要素に触れると「解放されたインスタンス0xfb5780にメッセージが送信されます」UITableViewフッターに要素を配置すると、その要素をいつ解放するのですか?

漏れは実際には漏れていませんが、明らかにClangは上記のコードを嫌いです。私はClangがあなたのコードで間違っている可能性のあるものすべてを決定する限り、福音ではないことを知っていますが、この場合、はおそらく正しいでしょう。私はそれを割り当てた、私はそれを解放する必要があります。

私が間違っていることに関するアイデアはありますか?

答えて

2

効率を上げるために、必要になる前にフッターで使用するビューを作成する必要があります。 tableViewControllerのviewDidLoadでそれを作成し、それをメンバ変数に格納することもできます。

次に、あなたのviewForFooterメソッドでは、前に保存したビューを返します。

次に、tableViewControllerのdeallocメソッドで、ビューを解放します。

1

不要になるまで、それを保持する必要があります。

プライベートプロパティを作成して最初にnilに設定してから、nibを遅延ロードし、返されたビューをプロパティに割り当てます。その後、deallocまたはviewDidUnloadにセッターを介してnilに設定するだけです。

一度プライベートプロパティに割り当てると、releaseまたはautoreleaseに設定する必要があります。これは、設定者がそれを保持するためです。

関連する問題