私はUIGestureRecognizerをUIViewに添付しました。 dealloc中にこれをリリースするのは誰の責任ですか?具体的に私はdeallocでUIViewのジェスチャーリリーチャーをリリースする責任がありますか?
:
UITapGestureRecognizer *t =
[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(tapHandler:)];
[self.view addGestureRecognizer:t];
[t release];
ので、self.viewは現在gestureRecognizerの唯一の保持力を持っています。
更新 私はもっとはっきりしていたはずです。私の質問は、ビューdeallocメソッドと関係しています。ビューのスーパークラスは、ビューが解放されたときにgestureRecognizerのリリースを処理しますか?私は現在そのように仮定しています。
自分で解放するのではなく、すべてのオブジェクトで自動解放を呼び出すのは良い習慣ではありません。 – Tieme
@ティエム私は同意しない。これは、すべてのメモリ管理コードを1か所に保持して、可読性を向上させ、したがって、「解放」を忘れることによるリークの可能性を低減する。このメソッドが終了した後でもオブジェクトが保持されるため、遅延リリースはメモリのハイウォーターマークに影響しません。 autoreleaseを使うのは良い習慣ではないと言うあなたの理由は何ですか? –
私はこの例であなたに同意します。ここでautoreleaseを呼び出すのは大丈夫です。しかし、あなたのオブジェクトを自動リリースすることは今でも良い習慣ではありません。結局のところ、メモリ管理にいくらかのオーバーヘッドが加わることになります。 – Tieme