有一个关于弱自我、阻塞和保留周期的问题。
通过这本书,我明白我们需要在块中使用weakself..
问题是,什么时候?
例如,简单的动画代码,永远不要包含weakself..
i.e
self.myView.alpha = 1.0;
[UIView animateWithDuration:0.2 animations:^{
self.myView.alpha = 1.0;
}];
这段代码可以吗?或者我应该在块之前创建一个weakself并在里面使用它?
在我所有的代码和我曾经参与过的所有其他项目中,从未见过任何一行使用弱自我。
我现在尝试在每个块中使用weakself..
只是我不确定是否有必要
期待您的意见
谢谢
当存在循环引用的可能性时,您应该使用弱自我。
想象一下 foo 的实例对 bar 具有强引用。现在你给 bar 一个块来引用 foo 的 self。现在有人释放了 foo,但 bar 保留了该块。现在 foo 对 bar 具有强引用,而 bar 在块中拥有对 foo 的强引用。 Foo 不会被释放,因此 bar 也不会被释放,因为 bar 保留着它。但唯一保留在 bar 上的是现在未使用的 foo。您已经获得了一个保留周期,并且这两个对象现在漂浮在内存中,无法访问。
UIView 的动画不会造成任何问题,因为该块是在 animate: 方法返回之前调用的,并且 UIView 不会保留该块。
每当 ARC 发现存在循环引用的可能性时,它通常都会向您发出警告。但情况并非总是如此。一个好的经验法则是,当你不知道区块会在哪里时,就使用弱自我。
希望这能有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)