古い用語では、自動解放されたプロパティを保持プロパティに割り当てることです。それを行うとどうなるか、次のようなことが行われます。
@property(strong, nonatomic) NSString *new;
...
NSString *old = [NSString stringWithFormat:@"%@ %@"), @"hello", @"world"];
new = old;
古い用語では、自動解放されたプロパティを保持プロパティに割り当てることです。それを行うとどうなるか、次のようなことが行われます。
@property(strong, nonatomic) NSString *new;
...
NSString *old = [NSString stringWithFormat:@"%@ %@"), @"hello", @"world"];
new = old;
あなたの質問に対する私のコメントに追加します:
これを読む
変数を宣言できるさまざまなタイプのライフタイム修飾子について説明し、それぞれの例を示します。
関連するビットで編集します。
使用できるライフタイム修飾子は次のとおりです。
__強い
__弱い
__unsafe_unretained
__自動リリース
それらの説明はドキュメントにありますが、最初の2つに進みます。
__strong
はデフォルトのタイプ(指定しない場合)であり、オブジェクトの保持カウントが1増加します。オブジェクトを指す強力なポインターがある限り、オブジェクトは存続します。
__weak
オブジェクトの保持数を増やしたり、オブジェクトを存続させたりすることはありません。同じオブジェクトを指す強い参照がない場合、弱いポインタは自動的にnilに設定されます。(__unsafe_unretained
実際には弱いとほとんど同じですが、nilに設定される代わりにぶら下がっています)。
弱いポインタにすぐに割り当てられたオブジェクトを作成すると、そのオブジェクトへの強い参照がないため、すぐに割り当てが解除されます。
ドキュメントからのサンプルコード:
NSString * __weak string = [[NSString alloc] initWithFormat:@"First Name: %@", [self firstName]];
NSLog(@"string: %@", string);
この場合、の値string
を印刷しようとするとnullになります。
弱いポインタを使用できるのは、それを参照するオブジェクトにすでに少なくとも1つの強い参照がある場合のみです。それ以外の場合、(新しい)オブジェクトは即座に割り当て解除されます。