7

NSMutableDictionary 内のすべてのオブジェクトを解放したいときに発生する、理解できないエラーがあります。

bodyと呼ばれるカスタムオブジェクトで発生しており、出力は次のとおりです。

-[__NSTaggedDate body]: unrecognized selector sent to instance 0xffffffffffffffff

私はインターネット上でそれについて非常に貧弱な情報を見つけました.

4

4 に答える 4

9

それがAppleのプライベートクラスです。このようなエラーは通常、メモリ管理を台無しにしたときに発生します。

ディクショナリ内のすべてのオブジェクトを解放しようとしているのはなぜですか? オブジェクトをディクショナリ (または配列) に追加すると、ディクショナリはそれを保持します (所有権を取得します)。ディクショナリからオブジェクトを削除すると解放されますが、その必要はありません。

すでにARC の使用を検討しましたか? これにより、メモリ管理がはるかに簡単になります。オブジェクトの保持と解放について心配する必要はもうありません。

于 2012-09-13T15:24:15.333 に答える
6

これは文書化されていない内部のココア クラスです。しかし、それは実際に何が起こっているのかということではないので、気にする必要はありません。説明が複雑で、ここでは関係のない理由でおそらく発生しているニシンです。

報告されたアドレスを見てください: 0xffffffffffffffff。意味のない値です。その赤いニシンがなければ、セグメンテーション違反があったはずです。

何らかの理由で、メッセージbodyを無効なポインターに送信しています (どこかでデータが破損している可能性があります)。

于 2012-09-13T15:28:24.710 に答える
3

このクラスはわかりませんが、おそらくプライベート クラスです (「タグ付きポインター」トリックを使用する NSDate オブジェクトの内部表現であると思いますが、推測です)。

とにかく、クラッシュは というオブジェクトではなく、 というメソッドを呼び出すbodyときに発生しています。クラッシュはおそらく、メモリ破損を生成するコードのメモリ管理が悪いためですbody

  • 過剰にリリースされたオブジェクトを追跡できるように、デバッグでアプリを実行するときにゾンビをアクティブにする必要があります
  • 通常、自分自身のオブジェクトを保持および解放する必要はありませんNSDictionary。コンテナ クラスは保持しているオブジェクトを気に入っNSArrayNSDictionary保持し、オブジェクトがオブジェクトから削除されたときにそれらを解放するためです。したがって、「NSMutableDictionary 内のすべてのオブジェクトを解放したい」理由がわかりません。removeAllObjectsそれを呼び出すだけでNSDictionary完了です。release自分でオブジェクトを呼び出す必要はありません (retainまた、オブジェクトを辞書に追加する場合)
于 2012-09-13T15:27:46.797 に答える