0

簡単な質問ですが、私は愚かではないことを確認したいと思います。

私の iPad アプリでは、UIView を動的に作成し、UIButtons、UIImageViews、時には MPMoviePlayerController、時にはいくつかの UIImages をアニメーションとして持つ UIImageView で埋めています。

一定の時間が経過したら、ビューを画面から削除して破棄します。

問題は 、これらのオブジェクトのいずれかを nil に設定する必要があるかどうかです。

割り当てた後にすべてをリリースしていますが、リークはありません。しかし、メモリが不足した後、私のアプリは最終的にクラッシュします。私が構築するこれらのビューのそれぞれは、記憶のどこかに潜んでいるようです.

どんな助けでも大歓迎です。

ダンクス

4

2 に答える 2

4

コードなしで、または ARC を使用しているかどうかを知らずにコメントするのは困難です (「解放」と言ったので、そうではないと推測します)。

  1. 分析を行い、フラグが立てられたすべての問題を修正します。正しく保持/リリースしているかどうかを伝えるのに非常に優れています
  2. Leaks Instrument を使用して漏れを見つける
  3. リークがなくなってもまだクラッシュしている場合は、ゾンビをオンにして、リリースが早すぎないようにしてください。

変数を nil に設定しても、メモリは解放されません。@propertyで宣言されている がある場合(retain)、自動生成されたセッターがそれを作成するため、プロパティを nil に設定すると古い値が解放されます。

プロパティを持つクラスのdeallocは、保持されたオブジェクトへのポインタであるすべてのプロパティに対してこれを行う必要があります。UIViewController の場合、viewDidUnloadIBOutlet プロパティに対してもこれを行う必要があります。

于 2012-05-10T16:37:17.567 に答える
1

ARC を使用している場合UIView、別の as サブビューを追加するUIViewと、保持カウントが増加します。「removeFromSuperview」すると、減少し、割り当てが解除されます。Arc 以外の環境では、割り当てて UIView に追加すると保持が 2 になりますが、解放すると 1 に戻ります。そのため、それらの間には常にバランスがあります。何が起こっているかを確認するには、Instruments を使用して問題を特定する必要があります。


「nil」に意味があるのは、iVar の @property (保持用) がある場合のみです。何故ですか?古い値を解放し、新しい値を渡された値 (この場合は nil) に設定するためです。おそらく、この問題は に関連していると思われますが、別の問題でUIViewsある可能性があります。そのため、Instruments を使用することをお勧めします。

于 2012-05-10T16:36:02.733 に答える