質問

私のプロジェクトはアークを使用しています。以下のコードでテストしました:

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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top