有一个关于弱 self ,块和保留循环的问题。
通过这本书,我明白我们需要在块中使用weakself ..
问题是,什么时候?
例如,简单的动画代码,从不包含weakself..
IE
self.myView.alpha = 1.0;
[UIView animateWithDuration:0.2 animations:^{
self.myView.alpha = 1.0;
}];
这段代码好吗?还是应该在块之前创建一个弱自我并在内部使用它?
在我所有的代码和我曾经参与过的所有其他项目中,从未见过使用弱自我的一行。
我现在试图在每个块中使用weakself..
只是我不确定是否有必要
期待您的意见
谢谢
最佳答案
正如其他人指出的那样,在否则会有强引用循环(又名保留循环)的情况下,您绝对应该使用 weakSelf
模式。但更一般地,当您不希望块保留对象本身时(即使在不涉及保留周期的情况下),您应该使用 weakSelf
。
一个很好的例子是由某个 View Controller 发起的网络操作。假设用户发起了一些上传。问题是您是否希望异步上传过程保留 View Controller ,即使它可能引用该 View Controller 以更新某些进度条等。如果 View Controller 被解除,您可能不希望它保留 View Controller ,即使您可能希望让上传继续。
这只是一个随机示例,但最重要的是,只要您希望后台进程继续,您可能希望使用 weakSelf
模式,但您不希望它保留其他对象。只需查看您的功能需求并考虑强引用周期风险,然后决定是否需要使用 weakSelf
模式。
在 animateWithDuration
的情况下,当 View 被关闭时动画停止,强引用立即解析,所以没有强引用循环。
关于ios - 块中的弱自我,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22839071/