vie*_*one 3 autorelease weak xcode4.2 automatic-ref-counting
我的项目使用ARC.我测试了下面的代码:
Run Code Online (Sandbox Code Playgroud)NSString __weak *string; @autoreleasepool { string = [NSString stringWithString:@"AAA"]; } NSLog(@"string: %@", string);
我认为它输出为:
string: (null)
Run Code Online (Sandbox Code Playgroud)
但实际输出:
string: AAA
Run Code Online (Sandbox Code Playgroud)
我不明白.__weak有什么影响?
编辑:
这段代码如下:
Run Code Online (Sandbox Code Playgroud)NSString __weak *string; NSString __strong *str; @autoreleasepool { str = [NSString stringWithFormat:@"%@", @"AAA" ]; string = str; } NSLog(@"string: %@", string);
它还输出为:
string: AAA
Run Code Online (Sandbox Code Playgroud)
NSString __weak *string;
@autoreleasepool {
string = [NSString stringWithFormat:@"%@", @"AAA"];
}
NSLog(@"string: %@", string);
Run Code Online (Sandbox Code Playgroud)
它输出如下你想要的.
string: (null)
Run Code Online (Sandbox Code Playgroud)
从而,
string = [NSString stringWithString:@"AAA"];
Run Code Online (Sandbox Code Playgroud)
和...一样
string = @"AAA";
Run Code Online (Sandbox Code Playgroud)
未在堆中分配的常量字符串文字.
编辑:
str变量仍然是自动释放对象的强引用.
以下代码正是您想要的.
NSString __weak *string;
{
NSString __strong *str;
@autoreleasepool {
str = [NSString stringWithFormat:@"%@", @"AAA" ];
string = str;
}
}
NSLog(@"string: %@", string);
Run Code Online (Sandbox Code Playgroud)
和
NSString __weak *string;
@autoreleasepool {
NSString __strong *str;
str = [NSString stringWithFormat:@"%@", @"AAA" ];
string = str;
}
NSLog(@"string: %@", string);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2205 次 |
| 最近记录: |