質問

私はC ++の15年のベテランであり、iPhoneのメモリの問題を簡単に処理できると思っていました。しかし、私はこの新しい環境に何ターンか謙虚になりました。これが私の問題です。質問を正しくしていることを願っています。

基本的に、appdelegateで共通オブジェクトの可変配列を保持しています。これは、複数の異なるビューで使用されるオブジェクトのコレクションを維持するための合理的な場所のようです。ただし、ビューを作成してnavコントローラーにプッシュしてから、ビューがそれらの値を使用し始めるまでの間、オブジェクトを作成したメモリ内の場所はさまざまな値で踏みにじられます。

すべてのコードを調べて、参照カウントが正確であることを確認しましたが、何も見つかりませんでした。そこで、すべての「リリース」をコメントアウトしました。オブジェクトがまだ存在することを保証するための呼び出しが、ストンプは引き続き続行されます。

私の質問はこれです... 「プッシュ」するときに注意する必要があることがありますか?私の記憶が踏みにじられる可能性のあるビュー?ビューコントローラーをalloc-initしてから「pushViewController」を実行するユーザーが押すボタンがあります。含まれるnavコントローラー用。後続の行で、オブジェクトが作成されたことを確認し、メモリを追跡します。残念ながら、ボタンイベントが" PurpleEventCallback"に巻き戻されると、メモリが足りなくなります。

これは誰にとっても意味がありますか?私の記憶が無効になる原因となる一般的に知られていない私のビューに何か起こっていますか?

役に立ちましたか?

解決

SOへようこそ!あなたはすべてを正しくやっているようです。保持/解放が問題を引き起こしていないことを確認するために、View Controllerをプッシュする前にアレイ構造を再度保持してみてください。一部のコンストラクターは保持カウント1でオブジェクトを返し、他のコンストラクターは保持カウント0で自動解放されたオブジェクトを返すことに注意してください。原則として、" new"、" create"で始まるすべての関数は、または" alloc" +1保存カウントを持つオブジェクトを返します。 [NSMutableArray arrayWithCapacity:] [NSString stringWithFormat:] などの他の便利な関数は、自動解放され、保持カウントがゼロのオブジェクトを返します。これらのオブジェクトへのポインタを保持している場合、実行ループが物事をクリーンアップすると、それらはランダムに消えます。

" zombies"を使用してデバッグすることもできます。技術。 EXE_BAD_ACCESS エラーをランダムに取得し始めるときに非常に便利です。詳細については、次のページをご覧ください。 http://www.cocoadev.com/index.pl? NSZombieEnabled

その記事から:" ...ゾンビが有効になっていると、割り当て解除されたオブジェクトへのメッセージは奇妙な振る舞いや理解しにくい方法でクラッシュすることはなくなりますが、代わりにメッセージを記録し、予測可能なデバッガーブレークポイントで死ぬでしょう方法。これは、過剰なリリースや時期尚早なリリースを追跡するときに使用するツールです。

役立つことを願っています!

他のヒント

Cocoaの自動解放プールの概念については、これまで読んだことがないかもしれません。オブジェクトの自動リリースは、オブジェクトのリリースを現在のイベントサイクルの終わりまで延期します(または自動リリースプールが空になるたびに)。

自動解放が問題かどうかを確認するには、環境変数 NSEnableAutoreleasePool " NO" に設定します。問題が解決したら、自動解放が問題でした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top