今日、ふと気になったことがあります。
MyViewController *myViewController
ルートインターフェイスでプロパティを宣言し、UIViewController
それを実装するとします (合成、リリース、アンロードなど)。
次に、関数がありますloadMyView()
:
- (void)loadMyView {
if (!self.myViewController)
self.myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[self.view addSubview:self.myViewController.view];
}
と:
- (void)hideMyView {
[self.myViewController.view removeFromSuperview];
}
これらの機能は複数回使用できます。
問題は、ビューを非表示にすると、その内容と現在の状態とともにビューが不要になることです。それでは、メモリからそれを削除して後で再度割り当てることができるようにする正しい方法は何ですか (したがってif
、メソッド内のステートメントを省略しloadMyView
ます)、その理由は何ですか?
一時オブジェクトを作成してから解放しない理由は、他の理由でオブジェクトへの強力なポインタが必要だからです。
hideMyView
私は:
self.myViewController = nil;
[self.myViewController release];
または 3. 初期化時にメモリを自動解放: self.myViewController = [[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]autorelease];
(しかし、いつ解放されるのでしょうか?)
これにはまだかなり新しい。