Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么弧中的弱指针没有设置为零?_Objective C_Ios_Automatic Ref Counting - Fatal编程技术网

Objective c 为什么弧中的弱指针没有设置为零?

Objective c 为什么弧中的弱指针没有设置为零?,objective-c,ios,automatic-ref-counting,Objective C,Ios,Automatic Ref Counting,可能重复: 这是我的代码(arc) 我认为输出应如下所示: 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 谁能帮帮我,

可能重复:

这是我的代码(arc)

我认为输出应如下所示:

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”(它很弱,在string1=nil之后应该是nil)

编辑: 大家好。我们会朝着错误的方向讨论吗? 也许NSLUB是在核心基础函数引用中定义的。ARC对于NSLog的核心函数的参数有一定的规则吗?我们将弱对象作为参数传递到NSLog中,它会将弱对象变成自动释放?

@“aaa”
是一个编译时常量,永远不会被释放。因此,即使只有弱指针,它仍然是有效对象

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

更新

现在我自己已经测试过了,它似乎仍然没有达到预期的效果。关于这个问题还有进一步的讨论

@“aaa”
是一个编译时常量,永远不会发布。因此,即使只有弱指针,它仍然是有效对象

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

更新


现在我自己已经测试过了,它似乎仍然没有达到预期的效果。关于这个问题还有进一步的讨论

因为网络错误,我只是多次发送了这个问题。它导致了一些问题,所以我再次发送。任何知道这个arc问题原因的人,请给我一些建议。因为这不是一个好问题,所以关闭了这个问题。然而我看到你试图编辑它,这是一个真正的问题,所以因为你的旧的不太可能被重新打开,我会回答它!欢迎来到stack overflow,有时会有很多人。那个问题被关闭了,因为网络错误,我只是多次发送了这个问题。它导致了一些问题,所以我再次发送。任何知道这个arc问题原因的人,请给我一些建议。它被关闭了,因为它不是一个好问题。然而我看到你试图编辑它,这是一个真正的问题,所以因为你的旧的不太可能被重新打开,我会回答它!欢迎来到stack overflow,有时候会有很多人。嗨,我知道你的想法,但我已经更改了代码:self.string1=[[NSString alloc]initWithFormat:@“%@”,“aaa”];结果仍然显示temp为“aaa”。顺便说一句,我使用的是xcode4.5.1(ios6),我原本以为是这样,但被调试器甩了。然而,这是因为我的断点位于错误的位置。我没有意识到,在最后一行的断点之前,变量似乎被设置为nil。所以,这是正确的答案。使用NSData尝试此实验表明它立即被释放。尝试将NSData作为参数传递到NSLog。结果不同。您好,我知道您的想法,但我更改了代码:self.string1=[[NSString alloc]initWithFormat:@“%@”,@“aaa”];结果仍然显示temp为“aaa”。顺便说一句,我使用的是xcode4.5.1(ios6),我原本以为是这样,但被调试器甩了。然而,这是因为我的断点位于错误的位置。我没有意识到,在最后一行的断点之前,变量似乎被设置为nil。所以,这是正确的答案。使用NSData尝试此实验表明它立即解除分配。尝试将NSData作为参数传递到NSLog。结果不同。
string1  aaa
temp     aaa
---after self.string1 = nil----
string1   (null)
temp      aaa