新情報
私の問題は、スウィズルにautoreleaseメソッドを作成することにより、どこにあるか私が決定しました。
あなたが何をしているかわからない限り、私はそれをすることをお勧めしませんが、これは私が知ったことです。
NSThreadは独自のスレッドを作成し、呼び出されたメソッドは自動解放プールにラップする必要があります。
グランドセントラルディスパッチは、ディスパッチ_...コマンドを使用するときに自動解放プールに適応します。しかし、あなたが手動で発送するとき。それを自動解放プールに入れたいかもしれません。
また、ARCはプール外で自動解放が行われることを通知することもできません。
したがって、ARCを使用していて、自動解放プールの外にいることがわかっている場合。あなたはそれについて何もできません。あなたはすべての便利な方法を避けたいでしょう。
これを使用してください。代わりに、この
[NSString stringWithFormat:@"%@",myObject];
の
[[NSString alloc] initWithFormat:@"%@",myObject];
これは、アークシステムを保持し、解放することができますが、あなたは便利なメソッドを使用していないので、便利な方法で行う基礎となる自動解放はスキップされます。
希望に役立ちます。
オリジナル回答
[OK]を、私はこの質問は十分に詳細に答えた感じいけません。
提示されているメッセージは、デバッガは、状況のデバッグに役立つ可能性のブレークポイントを
objc[1310]: Object 0x34f720 of class SimpleKeychain autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
指摘されました。今、このブレークポイントは実際に状況をデバッグするのに役立ちませんでした。デバッガにブレークポイントを追加する方法を知っておくことが重要であると思うので、そのエラーを解消するまで(インターネットを精査して何も見つけていない)時間を費やしました。
すべてのエラーをブレークしてもこれをキャッチしないのは面倒ですが、ここではブレークポイントをデバッガに追加する手順を示します。
は、あなたがしたいまず最初に、このタブをクリックすることにより、デバッガのブレークポイントナビゲーター
を選択している
次
あなたはナビゲータペインの下部に向かって見て、プラスボタンを押す
これにより、手動でブレークポイントを追加することができます。
C++ブレークポイントを選択し、名前テキストフィールドにメッセージ名を入力しました。それは実際の休憩で行ったこの例外を追加した後
。
しかし、これは目的とする開発者として有用かもしれません。これがAssemblyコードに壊れました。
残念ながら、それが唯一のスレッドの呼び出しスタック上でこの点を示しました。
そして、それはautoreleaseの問題がdispatch_onceコールで自動解放と呼ばれるクラスためだったことが判明しました。さらに調査したところ、+(ボイド)負荷;クラスのメソッドが何よりも先に呼び出されました。これはcall_load_methods関数を介して行われ、メインメソッドのスレッド外です。
はこれを修正するために、私は単にコールの周りに自動解放プールラッパーを追加しました。
別の解決策は、+(ボイド)負荷内側自動解放プールを追加することであってもよいです。方法。これは私の用途には十分でした。
注:問題を見つけて、結果の回答へのすべての経路を把握することができないため、ここに投稿にこれを追加します。デバッガが、リストされた関数にブレークポイントを追加するよう指示した場合、その情報を取得するための情報が必要です。うまくいけば、これは、この回答を見つけようとしている人々の不満を下げるでしょう。
自動解放プールはありますか?あなたがxcode(プロファイルそれ)で見つけることができるヘルパープログラムの1つを使って、アプリケーションのリークをチェックしてください – chikuba
私は自動解放プールを使用しません。確かに、私はあなたが1つを使用する理由を理解していないので、私は決して持っていません。しかし、私はそれを試してみます – Andrew
それはApp delの前に現れます。しかし、私は全体の行をコメントアウトし、私はまだオブジェクトを漏れている。どんな考え? – Andrew