NSString __weak *string;
@autoreleasepool {
string = [NSString stringWithFormat:@"%@", @"AAA"];
}
NSLog(@"string: %@", string);
it outputs as the following what you want.
string: (null)
Thus,
string = [NSString stringWithString:@"AAA"];
is same as
string = @"AAA";
the constant string literal that is not allocated in the heap.
EDITED:
str variable has still strong reference for the autoreleased object.
The following code is what exactly you want.
NSString __weak *string;
{
NSString __strong *str;
@autoreleasepool {
str = [NSString stringWithFormat:@"%@", @"AAA" ];
string = str;
}
}
NSLog(@"string: %@", string);
And
NSString __weak *string;
@autoreleasepool {
NSString __strong *str;
str = [NSString stringWithFormat:@"%@", @"AAA" ];
string = str;
}
NSLog(@"string: %@", string);
本文探讨了Objective-C中弱引用变量与自动释放池的交互作用,并通过具体代码示例展示了如何正确使用弱引用避免内存管理问题。

被折叠的 条评论
为什么被折叠?



