为啥在 ARC 中发送消息会导致保留周期警告,但属性集不会?
Posted
技术标签:
【中文标题】为啥在 ARC 中发送消息会导致保留周期警告,但属性集不会?【英文标题】:Why does a message send cause a retain cycle warning in ARC, but a property set does not?为什么在 ARC 中发送消息会导致保留周期警告,但属性集不会? 【发布时间】:2012-12-24 05:36:22 【问题描述】:[self.foo setBlock:^
[self doSomething]; // causes warning
];
对
[self.foo setBlock:^
self.bar = baz; // does not cause warning
];
警告“在此块中强烈捕获 self
可能会导致保留周期。”
两者都不会导致强引用吗?
【问题讨论】:
如果将第二个示例更改为[self setBar:baz];
,您会收到警告吗?
是的,如果我通过该语法设置属性,那么我会这样做。
编译器错误。可能会在以后的版本中修复。
我明白了。这是 xcode 4.5 FWIW。
很奇怪。 self.bar = baz
和 [self setBar:baz]
应该是相同的:/
【参考方案1】:
这是一个编译器错误,您应该向 Apple 提交错误报告。
两者都是一样的,a.b = c
只是写[a setB: c]
的方式不同。如果编译器处理一个与另一个不同,这就是一个错误。
【讨论】:
以上是关于为啥在 ARC 中发送消息会导致保留周期警告,但属性集不会?的主要内容,如果未能解决你的问题,请参考以下文章
更新到 iOS 6.1 后出现 ARC Retain Cycle