Xcode 4.2のアークの軸と自動エリーズプール
-
25-10-2019 - |
質問
私のプロジェクトはアークを使用しています。以下のコードでテストしました:
NSString __weak *string; @autoreleasepool { string = [NSString stringWithString:@"AAA"]; } NSLog(@"string: %@", string);
私はそれが出力されたと思います:
string: (null)
しかし、それは実際に出力します:
string: AAA
わかりません。 __ウィークの効果は何ですか?
編集:
以下のこのコード:
NSString __weak *string; NSString __strong *str; @autoreleasepool { str = [NSString stringWithFormat:@"%@", @"AAA" ]; string = str; } NSLog(@"string: %@", string);
また、出力:
string: AAA
解決
NSString __weak *string;
@autoreleasepool {
string = [NSString stringWithFormat:@"%@", @"AAA"];
}
NSLog(@"string: %@", string);
それはあなたが望むものとして次のように出力します。
string: (null)
したがって、
string = [NSString stringWithString:@"AAA"];
と同じです
string = @"AAA";
ヒープに割り当てられない一定の文字列。
編集:
STR変数は、自動化されたオブジェクトの強力な参照を持っています。
次のコードは、正確にあなたが望むものです。
NSString __weak *string;
{
NSString __strong *str;
@autoreleasepool {
str = [NSString stringWithFormat:@"%@", @"AAA" ];
string = str;
}
}
NSLog(@"string: %@", string);
と
NSString __weak *string;
@autoreleasepool {
NSString __strong *str;
str = [NSString stringWithFormat:@"%@", @"AAA" ];
string = str;
}
NSLog(@"string: %@", string);
所属していません StackOverflow