-1

didFinishLaunchingWithOptionsでは、最初のコードは次のとおりです。

NSMutableArray *k = [[NSMutableArray alloc] initWithCapacity:10];
[k release];

(私は多くのデバッグの後にそれをこのケースに減らしました)そして私は得ています

*** -[__NSArrayM class]: message sent to deallocated instance 0x7576c90
*** -[__NSArrayM respondsToSelector:]: message sent to deallocated instance 0x7576c90

割り当て行の後の「k」のretainCountをチェックすると、1になります。NSMutableArrayをNSArrayに置き換えると、すべて問題ありません。ここで一体何が起こっているのですか?

4

2 に答える 2

1

そのエラーはどこかから来ているに違いありません。それはあなたがそれを使用していることを意味します。そうでなければ、あなたは持っていないでしょう

*** -[__NSArrayM respondsToSelector:]: message sent to deallocated instance 0x7576c90

しかし、次のようなものです:

*** -[__NSArrayM release]: message sent to deallocated instance 0x7576c90

さらに、retainCountを使用しないでください(理由はこちらをご覧ください)。

他の場所で使用していないことを確認してください。それとも、ARCを使用していますか?その場合、それを解放する必要はありません。

于 2012-11-15T16:47:24.913 に答える
0

ゾンビを有効にしても、コンソールに次のようなエラーが表示される場合:

2013-08-26 16:08:22.540 test [1231:303] * -[__ NSDictionaryM replysToSelector:]:割り当て解除されたインスタンス0x101b039a0に送信されたメッセージ

また、コードを数行に絞り込んで、オブジェクトをリリースしすぎていないことを確認しました。問題は、デバッガーが既に正しくリリースされたオブジェクトをシングルステップで通過したときにメッセージを送信することが原因である可能性があります。コードをステップスルーしない場合、コンソールメッセージは出力されません。それが発生することを確認するには、ゾンビを有効にして、以下のコードを1ステップ実行します。リリース後、上記のメッセージがコンソールに送信されます。

-(void)testDictionary
{
  NSMutableDictionary *outboundDictionary = [[NSMutableDictionary alloc] init];
  [outboundDictionary release];
}
于 2013-08-26T21:26:10.443 に答える