有一个关于弱 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/

10-13 04:29