0

可能重复:
在 xcode 4.5.1 中,关于 ios ARC

这是我的代码(弧)

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?

4

1 回答 1

5

@"aaa"是编译时常量,永远不会被释放。所以,即使你的弱指针是你唯一的东西,它仍然是一个有效的对象。

使用运行时创建的字符串、使用alloc / initWithFormat:或类似的方法再次尝试实验,您应该会看到预期的结果。

更新

现在我自己对此进行了测试,它似乎仍然没有按预期工作。这里有关于这个问题的进一步讨论

于 2012-10-22T06:40:26.130 回答