2

presentModalViewController:animated:(またはを使用する代わりに) 独自のアニメーションを使用して、アラート スタイルのビュー コントローラーを表示したい場合がありますUIAlertView

このビュー コントローラーを解放する正しい方法は、ビューが消えたときに呼び出されるコールバックにありますが、デリゲートを設定すると、やり過ぎに思えます。

だから私はこれを行います:

- (void)dismiss
{
    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
        self.view.alpha  = 0;
    } completion:^(BOOL finished) {
        [self.view removeFromSuperview];
        [self autorelease];
    }];
}

提示オブジェクトはView Controllerを解放または自動解放しません。メモリ管理に関しては、これで問題はないと思います。それは悪い習慣ですか?

4

2 に答える 2

0

私はこの悪い習慣を考えます。

retainこのオブジェクトを呼び出したオブジェクトだけがreleaseorautoreleaseを呼び出す必要があります。

私はあなたが電話していないと思います[self retain]


これが期待どおりに機能するかどうかさえわかりません。selfその時点で解放する必要があることを保証できますか?また、それを保持しているオブジェクトがreleaseそれ自体を呼び出せないのはなぜですか?. 強制しようとしselfていdeallocますか?

selfこの時点で の割り当てが解除された場合、まだ生きていると予想されていた他のオブジェクトがnilselfにメッセージを渡したり、さらに悪いことに、メモリが再割り当てされて、それらのオブジェクトが任意のオブジェクトにメッセージを送信したりする可能性があります。

于 2012-07-20T09:56:48.373 に答える
0

悪い習慣のようですが、メモリへの影響は見られません。モーダル ビューに関しては、次の方法を使用して達成したい場合は、ポップ バックしてみませんか。

[self.navigationController popViewControllerAnimated:YES]; 
于 2012-07-20T10:01:04.597 に答える