0

私はメモリバグで完全に途方に暮れています。この問題は でのみ発生happensし、 ではdevice発生しませんsimulator。また、アプリがデバイスに初めて読み込まれたときにのみ発生します。アプリを閉じて再起動すると、問題は事前設定されません。これは私が得ているエラーです

-[CFString retain]: message sent to deallocated instance 0xfd5a2f0

解放された文字列が何であるかを把握するためにあらゆることを試みました。シミュレーターではなくデバイスで実行しているときに、リリースされたオブジェクトが何であるかを理解するのを手伝ってください! 前もって感謝します!

更新: まだ解決策はありませんが、フレームを設定したコード行でアプリが一貫してクラッシュし、上記のエラーが表示されることを確認しました。このコードをコメントアウトすると、アプリはこの時点を通過しますが、他の奇妙な場所でクラッシュする可能性があります。クラッシュがどこから発生しているのかを特定することすらできません。

CGRect frame = CGRectMake(27, 96, 265.0, 50.0);
someAcct.frame = frame;

これは文字列ではないので、私はこれにとても混乱しています。何か案は?

更新 2: この問題は、同期されている NSUser デフォルトに直接関連しています。これはかなりランダムに見えますが、これが問題の原因です。ヘルプはありますか?

更新 3: 問題は 1 週間前に解決されました。これは実際には、文字列にアクセスできないことが原因でした。文字列がメソッドに渡され、そのメソッドは機能し、データを別のメソッドに渡しました。最終的に、データはユーザーのデフォルトと、ドキュメント フォルダー内に含まれるローカル plist に書き込まれました。突然、上記のような非常に奇妙な場所でアプリがクラッシュすることがありましたが、それらの場所は文字列とは関係ありませんでした。私は困惑し、非常に長い間それで遊んだ後、.h ファイルに向かい、各文字列が .m ファイルで合成され、その self.stringName が適用されていることを確認して、一度に 1 つずつ各文字列を調べることにしました。 .m ファイル全体。これに1時間費やした後、最終的に原因となった文字列を見つけ、問題は解決しました. セルフを使用しています。stringName を使用すると、メモリを見つけることができ、これらのあいまいで非常に紛らわしいアプリケーションのクラッシュを回避できます。すべての提案とヒントをありがとう!

4

3 に答える 3

1

追跡しやすくするために、didFinishLaunching()メソッドの先頭、途中、didFinishLaunching()のどこかにNSLogを配置してみてください。

次に、アプリが表示する最初のビューコントローラーのviewDidLoad()にNSLogをプッシュすることもできます。たとえば、タブバーインターフェイスを使用している場合は、最初のタブのルートビューコントローラのNSLogです。

NSLog(@ "step 1")、NSLog(@ "step 2")、NSLog(@ "step 3")...を使用して出力を整理し、コードがクラッシュする前にどこに到達したかを知ることができます。 、NSLog(@ "私はここにいます")ではありません。

于 2012-11-12T06:52:48.770 に答える
0

問題はのですretain countメモリ管理を参照して、何か不足していないか確認してください。

忘れずに回してくださいon NSZombieEnabled

于 2012-11-09T05:39:43.317 に答える
0

理由の 1 つは、iOS互換性が原因である可能性があります。デバイスとシミュレータが同じものを使用しているかどうかを確認してください。デバイスとiOS同じバージョンの OS でシミュレータを動作させ、releaseそれに応じて文字列を変更してください。

于 2012-11-09T06:40:40.987 に答える