-1

今日、ふと気になったことがあります。

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私は:

  1. self.myViewController = nil;
  2. [self.myViewController release];

または 3. 初期化時にメモリを自動解放: self.myViewController = [[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]autorelease];(しかし、いつ解放されるのでしょうか?)

これにはまだかなり新しい。

4

1 に答える 1

3

あなたの質問で混乱しているのは、loadview が UIViewController クラスのメソッドの 1 つであるということです。2 番目のビュー コントローラーを初期化し、2 番目のビュー コントローラーのビュー プロパティを最初のビュー コントローラーのビュー プロパティに追加するために、最初のビュー コントローラーの loadview メソッドをオーバーライドしても意味がありません。あなたの質問は、誰かがあなたに賢明な答えを与えるのに十分な文脈を提供しているとは思いません。

于 2012-04-20T02:13:47.217 に答える