0

私はiphone2.0でこのコード行を使用していますが、正常に機能します

pool=[[NSAutoreleasePool alloc]init];

[pool release];

このコード行をiphone3.0で実行すると、ログ画面にリークメッセージが表示されます。そのメッセージは

2009-10-13 03:26:31.841 Spectrum[3946:4c2b] *** _NSAutoreleaseNoPool(): Object 0xd819d0 of class NSCFString autoreleased with no pool in place - just leaking
Stack: (0x305a2e6f 0x30504682 0x52c14d 0x536f67 0x3058deff 0xb049 0xa554 0x3050a79d 0x3050a338 0x97181155 0x97181012)

誰かが私を助けることができますか?

前もって感謝します....

4

3 に答える 3

1

プールの割り当てとリリース コードは正常に見えます。それにもかかわらず、エラー メッセージは、自動解放プールの範囲外で何かが自動解放で割り当てられたことを示しています。これは、セカンダリ スレッドを使用する場合、特殊なロード メソッドを使用する場合、およびグローバルを初期化する場合によく発生します。

リークしているコードのビットを分離したら、別のNSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];とのセットでラップしてみることができます[pool release];

于 2009-10-13T08:26:18.503 に答える
1

このメッセージは、オブジェクトがautoreleaseautorelease スコープ外でメッセージを送信されたときに発生します。ブレークポイントを配置し_NSAutoreleaseNoPool、スタックをチェックして、プールを追加する必要がある場所を確認します。

于 2009-10-13T08:27:37.513 に答える
0

メインの実行ループとは別のスレッド内で、自動解放されたオブジェクトを作成するコード内の場所を探します。

于 2009-10-13T08:28:56.530 に答える