0

古い用語では、自動解放されたプロパティを保持プロパティに割り当てることです。それを行うとどうなるか、次のようなことが行われます。

@property(strong, nonatomic) NSString *new;

... 

NSString *old = [NSString stringWithFormat:@"%@ %@"), @"hello", @"world"];
new = old;
4

1 に答える 1

1

あなたの質問に対する私のコメントに追加します:

これを読む

可変修飾子

変数を宣言できるさまざまなタイプのライフタイム修飾子について説明し、それぞれの例を示します。

関連するビットで編集します。

使用できるライフタイム修飾子は次のとおりです。

__強い

__弱い

__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つの強い参照がある場合のみです。それ以外の場合、(新しい)オブジェクトは即座に割り当て解除されます。

于 2012-05-18T17:58:06.707 に答える