为什么在ARC中发送消息会导致保留循环警告,但设置属性则不会?

12
[self.foo setBlock:^{
    [self doSomething]; // causes warning
}];

对抗

[self.foo setBlock:^{
    self.bar = baz;     // does not cause warning
}];

警告是“在此块中强引用捕获self可能导致循环引用”。

这两种方式都会导致强引用,是吗?


如果将第二个示例更改为 [self setBar:baz];,您会收到警告吗? - Simon Goldeen
是的,如果我通过那种语法设置属性,我就可以。 - Aaron
16
编译器错误。可能在以后的版本中得到修复。 - bbum
我明白了。这是 xcode 4.5 FWIW。 - Aaron
挺奇怪的。self.bar = baz[self setBar:baz] 应该是一样的 :/ - Yaman
1个回答

1

这是一个编译器错误,您应该向苹果公司提交错误报告。

两者是相同的,a.b = c 只是写成 [a setB: c] 的不同方式。如果编译器对待它们有所不同,那么这就是一个错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接