我的项目使用ARC。我测试了下面的代码:
NSString __weak *string; @autoreleasepool { string = [NSString stringWithString:@"AAA"]; } NSLog(@"string: %@", string);
我认为输出为:
string: (null)
但实际输出:
string: AAA
我不明白。 __weak有什么影响?
编辑:
以下代码:
NSString __weak *string; NSString __strong *str; @autoreleasepool { str = [NSString stringWithFormat:@"%@", @"AAA" ]; string = str; } NSLog(@"string: %@", string);
它还输出为:
string: AAA
答案 0 :(得分:8)
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);