1

ARC(自動参照カウント)を使用するiOS(Obj-C)プロジェクトがあります。Appleのドキュメントと純粋な実験によると、次のようなステートメントを含めることはできません。

[UIThingamabob release];

これは、以前は、割り当てまたは保持された後にアイテムを解放する方法でした。今、私はあなたがIBオブジェクトがどのように作成されるかを管理しなければならないことを知っています

@property (nonatomic, retain) IBOutlet ...

ヘッダーファイルの一部。

私はすべてのIBアイテムに対して、上記のステートメントをそのまま使用しています(非アトミックおよび保持(または強力-とにかく違いは何ですか、それらはどのように使用されますか?))。iOSデバイスでテストすると、 didRecieveMemoryWarningイベントが発生したときにのみ表示されるUIAlertView(デバッグ目的で作成したもの)がランダムに取得されます。

私のベータテスターの中には、アプリを終了するまで、これらのビューをノンストップで攻撃している人もいます。

私の質問は、オブジェクトを解放できないので、didRecieveMemoryWarningイベントに何を入れるのですか?そこに置くものがない場合、@ property関数を使用してオブジェクトを作成する方法が原因でこれらのエラーが発生していますか?

4

3 に答える 3

3

@property (nonatomic, weak) IBOutlet...すべての IBOutlets に使用する必要があります。strong を使用すると、アウトレットは View Controller とそのスーパービューによって保持されます。ビューが消えると、View Controller はまだ表示されなくなったアウトレットへの参照を保持しています。アウトレット プロパティを nil に-viewDidUnload設定するか、弱設定を使用して nil へのポインターを設定すると、ビューが消えるときに自動的に行われます。

于 2012-05-15T02:49:15.033 に答える
1

ステートメントでは使用retainしないでください。@propertyARC オプションはassignweakおよびstrongです。詳細については、こちらを参照してください。

https://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

特にProperty Attributesの部分をチェック!

編集:コメントをありがとう、両方retainstrongは現在同等のようです。

于 2012-05-15T02:26:29.370 に答える
0

プロジェクトを見ずに何をすべきかを知ることは不可能ですが、次のようなことができます:

後で再生成できるデータの配列を消去します。バッファをクリアします。現在使用されていないオブジェクトを nil に設定します (他の場所に保持されていない場合は解放されます)。

于 2012-05-15T02:39:55.123 に答える