When using collectionview.performBatchUpdates, the updates block does not need explicit self like below image.
The method's docs are here. https://developer.apple.com/documentation/uikit/uicollectionview/1618045-performbatchupdates
My guesss is that performBatchUpdates's updates block life cycle is garanteed shorter than collectionView. And the updates block called using withoutActuallyEscaping.
Is there anyone have clear answer?
The answer is simple. Because it's not a escaping closure

The
animateclosure is escaping, while theperformBatchUpdatesclosure is not.