1

私は iOS 用の ARC にかなり慣れていない (そして iOS 全般にかなり慣れていない) ので、ARC についていくつか簡単な質問があります。

~ ビュー コントローラで、viewDidUnload() メソッドにプロパティを nil に設定するステートメントがない場合、ビュー コントローラが解放されたときにプロパティのメモリは解放されますか? もしそうなら、なぜこの viewDidUnload メソッドを明示的に持つ必要があるのですか?

~ ビュー コントローラーではないオブジェクトでは、プロパティをどこで nil に設定する必要がありますか? デロック中?などのプリミティブ プロパティについてはどうですか@property BOOL isActive;...それらを nil/zero に設定する必要がありますか?

ありがとう。

4

3 に答える 3

4
  1. プロパティが弱参照である限り、プロパティを nil に設定する必要はありません。ビューコントローラーにはビューへの強い参照が含まれており、ビューにはそのすべてのサブビューへの強い参照が含まれているため、IBOutlets は一般に弱い参照である必要があります。(そのビュー階層の一部ではない IBOutlets がある場合、それらは強力である必要があります。)
  2. nil またはゼロ、オブジェクト、スカラーは必要ありません。Xcode は、Interface Builder で作業するときに nilling ステートメントを挿入しますが、これは依然として ARC より前の Objective-C のコードを生成します。

viewDidUnloadおそらく;も必要ありません。メモリ ストレスが低い特別な状況でのみ呼び出されます。したがって、クリーンアップに依存することはできません。IBOutlets は弱い必要があるため、ビューがビュー コントローラーから削除されると自動的にクリーンアップされます (ビューがリロードされると復元されます)。

ここでは、あなたが新しい製品を書いていると仮定しています。つまり、iOS 5 以降のみをターゲットにしていることを意味します。新製品で iOS 4 をターゲットにしているのであれば、そうすべきではありません。世界は動き続け、市場の 80% が iOS 5 以降を使用しています。そして今日です。今後、iOS 5 の機能を回避するのは、さらに少数の人々にとってさらに困難になるでしょう。

于 2012-06-19T17:19:30.317 に答える
1

@properties のメモリ管理は、ARC の下で自動的に処理されます。自分自身をデリゲートとして設定した場合、(たとえば viewWillDisapear で) 離れる前にデリゲートを nil に設定して、デリゲートへの将来の呼び出しがガベージを参照しないようにするのが一般的です。最新のガイダンスについては、近日中に公開される WWDC ビデオにご注目ください。

于 2012-06-19T17:32:43.760 に答える
0

viewDidUnload では、アウトレット参照を nil に設定する必要があります。これは、ARC がそれらを解放し、その後誤って使用したくないためです。

プロパティで何もする必要はありません。それらは自動的に処理されます。実際、通常は ARC で dealloc メソッドを使用することさえありません。

于 2012-06-19T17:20:21.247 に答える