0

使用 collectionview.performBatchUpdates 时,该updates块不需要self像下图那样显式。

在此处输入图像描述

该方法的文档在这里。https://developer.apple.com/documentation/uikit/uicollectionview/1618045-performbatchupdates

我的猜测是,它performBatchUpdatesupdates块生命周期比 collectionView 短。并且该updates块称为 using withoutActuallyEscaping

有人有明确的答案吗?


答案很简单。因为它不是逃避封闭

4

1 回答 1

1

animate闭包正在转义,而闭performBatchUpdates包不是。

当闭包作为参数传递给函数时,闭包被称为转义函数,但在函数返回后被调用。当您声明一个将闭包作为其参数之一的函数时,您可以在参数的类型前写@escaping 以指示允许闭包转义

如果 self 引用类的实例,则引用 self 的转义闭包需要特别考虑。在转义闭包中捕获 self 很容易意外创建强引用循环。有关参考周期的信息,请参阅自动参考计数。

通常,闭包通过在闭包主体中使用变量来隐式捕获变量,但在这种情况下,您需要显式。如果你想捕获 self,在使用时显式编写 self,或者将 self 包含在闭包的捕获列表中。明确地写 self 可以让你表达你的意图,并提醒你确认没有引用循环。

于 2021-08-12T12:09:10.890 回答