強いプロパティと弱いプロパティはiOS5の新機能であるため、どのプロパティがいつ使用されるかを誰かに教えてください。
いつ強く使うべきか、いつ弱く使うべきか?
@property(nonatomic,strong)
@property(nonatomic,weak)
強いプロパティと弱いプロパティはiOS5の新機能であるため、どのプロパティがいつ使用されるかを誰かに教えてください。
いつ強く使うべきか、いつ弱く使うべきか?
@property(nonatomic,strong)
@property(nonatomic,weak)
自動参照カウント (ARC)に関する Apple のドキュメントを確認してください。
読む時間がない場合:
ARC は、オブジェクトのいくつかの新しい有効期間修飾子と弱参照を導入します。弱い参照は、それが指しているオブジェクトの存続期間を延長せず、オブジェクトへの強い参照がない場合、自動的に nil になります。
強いがデフォルトです。オブジェクトへの強力なポインタがある限り、オブジェクトは「生きている」ままです。
weakは、参照先のオブジェクトを存続させない参照を指定します。オブジェクトへの強い参照がない場合、弱い参照は nil に設定されます。
iOS 5 ARC は弱いリンクを自動的に無効にするため、オブジェクトがアンロードされると、そのオブジェクト階層は自動的に nil に設定されます。このため、はすべてのプロパティWeak
に推奨される関係です。outlet
これらのビュー オブジェクトは既にビュー コントローラーのビュー階層の一部であり、他の場所に保持する必要はありません。アウトレットをウィーク宣言する大きな利点は、viewDidUnload メソッドを記述する時間を節約できることです。
メモリ管理に関する非常に詳細なドキュメントを確認してください。ARC以前のものですが、メモリ管理を理解するのに役立ちます。プロパティの保持キーワードは引き続き ARC で機能し、単なる strong の同義語です。または別の特定のARC チュートリアル。
strong
のようなretain
、のweak
ようなassign
。主な違いは、プロパティに割り当てられているオブジェクトが解放されたときにweak
プロパティが変わることです。nil
例えば:
@property (nonatomic, weak) id test;
...
- (void)example
{
id foo = [[NSObject alloc] init];
self.test = foo;
foo = [[NSObject alloc] init];
assert(self.test == nil);
}
Strong
これは、このプロパティがオブジェクトを指している限り、そのオブジェクトが自動的に解放されないことを意味します。非ARCでは、これはの同義語ですretain
。
Weak
代わりに、プロパティが指すオブジェクトは自由に解放できますが、プロパティがに設定されている場合に限りますnil
。ARCでは、weakを使用して、それが指すオブジェクトを所有していないことを確認します。
強弱の違いは以下の通りです。
1.変数を強力に宣言すると、メモリ内のアプリケーションインスタンスまでコンパイラによって割り当てが解除されません。その参照に nil 値を設定すると、コンパイラによって割り当てが解除されます。デフォルトでは、任意のローカル変数が強力な変数として割り当てられます。例:- var str = "hello world"
str = nil を設定すると、割り当てが解除されます。
2. 変数をストロングとして宣言すると、他のインスタンス (クラス) によって保持され、保持カウントが 1 ずつ増加します。
弱い性質。
1.弱いプロパティを宣言すると、強力な参照がメモリ内にあるまでデータ/インスタンスアドレスのみが含まれます。強力な変数参照の割り当てが解除された場合、自動的にnilに設定されます。
例:- var str = "hello world" weak var stringVar = str
str に 200 のヒープ アドレスが含まれていると仮定し、str = nil を設定すると、コンパイラによって自動的に弱いプロパティ参照が nil に設定されます。
これが、stary ボード ref コントローラーの理由です。メイン ビューのみが強力に設定され、その他は弱いため、UIButton、UILabel アウトレットなどを見ることができます。