2011-01-19 14 views
1

私はスプラッシュビデオを再生し、カスタムフォントを追加したアプリを持っている。ipadアプリが新しいiOS 4.1.2でクラッシュするが、3.2で動作する

アプリはipad 3.2でも正常に動作しますが、4.2などでクラッシュします。ログには、私が割り当てたものをリリースすると書かれています。私は自分のコードを何百回もチェックしていますし、そのようなことはしません。

それは、シミュレータ上で、デバイス上で動作のどちらかの方法(両方とも3.2)

任意のアイデア?

EDIT:

<Error>: df(7903,0x3e3d7898) malloc: *** error for object 0x1a11b0: pointer being freed was not allocated 
*** set a breakpoint in malloc_error_break to debug 
Wed Jan 19 20:35:38 unknown UIKitApplication:com..imagazine[0x9c7c][7903]       <Notice>: def(7903,0x3e3d7898) malloc: *** error for object 0x1a11b0: pointer being   freed was not allocated 
Wed Jan 19 20:35:38 unknown UIKitApplication:com.imagazine[0x9c7c][7903] <Notice>: *** set a breakpoint in malloc_error_break to debug 
    Wed Jan 19 20:35:39 unknown ReportCrash[7905] <Notice>: Formulating crash report for process df[7903] 
    Wed Jan 19 20:35:39 unknown com.apple.launchd[1] <Warning>: (UIKitApplication:com.imagazine[0x9c7c]) Job appears to have crashed: Abort trap 
    Wed Jan 19 20:35:39 unknown SpringBoard[27] <Warning>: Application 'df' exited abnormally with signal 6: Abort trap 
    Wed Jan 19 20:35:39 unknown ReportCrash[7905] <Error>: Saved crashreport to /var/mobile/Library/Logs/CrashReporter/df_2011-01-19-203538_Sumas-iPad.plist using uid: 0 gid: 0, synthetic_euid: 501 egid: 0 

SOLUTION:すべての

まずNSZombiesを使用して、このようなエラーをキャッチします。

問題:0.2秒ごとにタイマーを設定していましたが、UIビューをクリアして割り当てていました。0.2秒ごとではなく、5秒ごとに1回です。 私は、標準のチェックでした:

if(vewCustom!= nil) { 
     [vewCustom removeFromSuperView]; 
     [vewCustom release]; 
     vewCustom = nil; 
    } 

をしかし、奇妙なことは、私は倍のコード数百を検証し、私は解放し、それがiPhoneのためのiOS4.2に働いたのいずれかの方法を介してではなかったでした。

私はタイマーを削除しましたが、まだクラッシュしていましたが、リリースを削除しても問題なく動作しました。

奇妙ですが、誰かが私が間違っていることを説明できればいいと思います。

+0

クラッシュしたスレッドのクラッシュレポートからバックトレースを表示してください。また、レポートに表示される例外タイプ。 – jer

+0

「働く」ことは重要ではありません。間違ったコードが時々動作する可能性があります。どのようにvewCustomを作成しましたか?あなたはスーパービューが持っているものの外にリファレンスを持っていましたか? vewCustomは保持されているプロパティですか? –

+0

はい、それは保持プロパティを持っていました。はい、スーパービューの外に参照がありました。しかし、私は無しであったかどうかを確認してからリリースしました。 –

答えて

1

ゾンビを有効にしてデバッグでアプリを実行してみてください。このようにして、上書きされたオブジェクトのスタックトレースを取得します。ここには、設定方法に関するリンクがあります。

http://iosdevelopertips.com/debugging/tracking-down-exc_bad_access-errors-with-nszombieenabled.html

+0

私はエラーを見つけることができた。しかし、その狂ったから、私はリリースを2回も呼んでいませんでした。 –

1

ログが真であると仮定します。それを見つける最も簡単な方法は、ゾンビを有効にして、あなたのアプリケーションを完全に実行することです。

http://loufranco.com/blog/files/debugging-memory-iphone.html

行うためのもう一つは、ビルドし、分析し、それぞれの事、それのフラグを見て:ここ(先端#1)を参照してください。私の経験では、偽陽性はごくわずかです。

+0

私はエラーを発見できた。しかし、その狂ったから、私はリリースを2回も呼んでいませんでした。 –

+0

autoreleaseが完了した後に返されたため、あなたが想定していないものをリリースしましたか? –

+0

いいえ、私はそれについて非常に確信しています。 –

1

何か他のものを探している間だけでこれを気づきました。クラッシュの原因は、removeFromSuperviewによってスーパービューがビューを解放するためです。したがって、その後のリリースは冗長(過剰リリース)です。 ARCの問題ではありませんが、他の状況で混乱を招く可能性があります。

+0

Scottではなく、removeFromSuperviewは保持カウントを1減らしますが、私がサブビューでリリースまたはオートリリースを呼び出さない限り、これはメモリリークです。 –

関連する問題