addSubview
ビューを保持しますが、それは問題ではありません。あなたの問題は、ビューのコントローラーが少し後になくなることです。
それはあなたの仕事ではないので、ビューを解放するべきではありません。あなたはそれを作成しませんでした、あなたはそれに触れませんでした。ほっといて。
物事を動かし続けるためには、有効なコントローラーに接続したままにしておく必要があります。したがって、コントローラーを解放するのではなく、手元に置いておく必要があります。コントローラーを解放する前に@property(retain) UITableViewController *siteController;
、andのようなプロパティを追加します。self.siteController = sitesel;
このようにして、すべてがメモリに残ります。
PS: きれいにするために、おそらく sitesel のアクセサーのビューを変更する必要があります。常にコントローラーに沿って行き来するようにするためです。コントローラーを設定するだけで、メソッドはさらに短くなります。
追加:そのセッターはそのように見える可能性があり、コントローラーと透過的に更新されるビューのみを設定する必要があります。
- (void)setSiteselController:(UITableViewController *)ctrl {
if (_sitesel)
[_sitesel.view removeFromSuperview];
[_sitesel autorelease];
_sitesel = [ctrl retain];
if (_sitesel) {
_sitesel.view.frame = CGRectMake(0,0,100,100);
[self.left addSubview: _sitesel.view];
}
}
元のコードは、このよりクリーンなバージョンに縮小されます。
UITableViewController *sitesel = [[UITableViewController alloc] initWithStyle: UITableViewStyleGrouped];
self.siteselController = sitesel;
[sitesel release];
PPS: UITableView を機能させるにはコントローラーが必要です。それははるかに簡単です!