这是我的代码(弧)
self.string1=@"aaa";
__weak NSString *temp= self.string1;
NSLog(@"string1 %@",self.string1);
NSLog(@"temp %@",temp);
self.string1=nil;
NSLog(@"---after self.string1 = nil----");
NSLog(@"string1 %@",self.string1);
NSLog(@"temp %@",temp);
我认为输出应该如下:
string1 aaa
temp aaa
---after self.string1 = nil----
string1 (null)
temp (null)
然而,当我在xcode4.5.1中运行它时,它让我感到困惑
string1 aaa
temp aaa
---after self.string1 = nil----
string1 (null)
temp aaa
任何人都可以帮助我,告诉我为什么temp = @“aaa”(它是__weak,在string1 = nil之后它应该是nil)
编辑: 嗨,大家好。我们会以错误的方向讨论吗? 也许NSLog是在核心基础功能参考中定义的。 ARC对核心基础功能的参数有一些规则就像NSLog一样?我们将_weak对象作为参数传递给NSLog,它会将_weak改为_autorelease?
答案 0 :(得分:5)
@"aaa"
是一个编译时常量,永远不会被释放。所以,即使你的弱指针是唯一的东西,它仍然是一个有效的对象。
使用alloc / initWithFormat:
或类似字符串,使用运行时创建的字符串再次尝试实验,您应该会看到预期的结果。
<强>更新强>
现在自己测试了它仍然似乎没有按预期工作。有关此问题的进一步讨论here