2011-07-07 6 views
0

これは私の見解では本当に奇妙です。私はそれのようなものを見たことがない。すべてのリリースをreleaseMethodというメソッドに入れました。そして、私のdeallocdidReceiveMemoryWarningには、私は[self releaseMethod];を持っています。私は多くのリリースを持っているので、より多くのオブジェクトorientetedとコードを保存するためにこれを行います。しかし時には(5回のうち2回、授与または服用する)、のreleaseMethodコールでEXC_BAD_ACCESSが得られます。コードは以下の通りです。私は、メソッド呼び出しに不正なアクセスを持たせることが可能であることを知りませんでした。私はメモリ管理を理解しており、メソッドを呼び出すのに必要なメモリはありません。 ありがとうございます。メソッドコールでEXC_BAD_ACCESSを取得する

- (void)dealloc { 
    [super dealloc]; 
    [self releaseMethod]; 
} 
+9

オブジェクトを 'dealloc'して、割り当て解除されたオブジェクトでメッセージを呼び出せると期待していますか? – Joost

+1

スーパーコールの前に入れてください。 –

答えて

2

すでに割り当て解除されたオブジェクトにメッセージreleaseを送信する場合、これはあなたが得るメッセージです。 releaseMethodで何かが過剰消去されていないことを確認してください。オブジェクトが割り当て解除されると、保持しているオブジェクトが解放されることに注意してください。

[super dealloc]に電話する前に[self releaseMethod]も入力してください。

+1

Joostが指摘したように、問題は、 '[super dealloc]'がメッセージングの自己の前に呼び出されるということです。これは危険な習慣です。 – Justin

+0

@ジャスティン:同意しましたが、エラーが散発的に発生し、一貫して発生していないため、おそらく何かをリリースしている可能性があります。 – PengOne

+1

私はまったく逆の場合を想定します。過剰放出は一貫したクラッシュにつながる。 – Justin

3

deallocの最後にあなたの[super dealloc]を置くことで、クラス内のものをクリーンアップしてから、スーパークラス内のものをクリーンアップすることができます。

関連する問題