2

こんにちは私は次のコードを持っています

NSString *analyticsStr = [[NSString alloc] initWithString:[self constructXMLMessage:TagObj]];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                        selector:@selector(sendAnalyticsString:)
                                                                          object:analyticsStr];
[operationQueue addOperation:operation];
[analyticsStr release];
//[operation release];

[操作リリース] のコメントを外すと、アプリがクラッシュします。そして、私はこのエラーを受け取ります:

malloc: * オブジェクト 0x726ed50 のエラー: 解放中のポインターが割り当てられませんでした *デバッグするために malloc_error_break にブレークポイントを設定します

私は、 NSOperationQueue がオブジェクトの保持を処理すると考えていました。私が間違っていること、または気づいていないことはありますか。

4

1 に答える 1

3

これをデバッグするには、Instruments の Zombies テンプレートを使用します。割り当てを解除する必要があるオブジェクトにメッセージを送信すると、タイムラインにフラグが表示されます。そのフラグのボタンをクリックして、オブジェクトを不当に解放した原因の調査を開始できます。

ところで、その文字列オブジェクトを作成する必要はありません。返される文字列はconstructXMLMessage:、現在の自動解放プールが続く限り持続します。これは、作業に必要なすべての時間です。突然死ぬことはありません。

于 2011-01-20T15:25:31.800 に答える