Note: weakifying self in a block has a few reasons.

If the block is retained by self, weakifying self helps avoiding retain cycle.

Otherwise, if the block is not retained by self, WE STILL WANNA WEAKIFY SELF because we don’t wanna anything unknown to retain self especially when self is complicated (i.e. view controller). Retaining self by in a block may ultimately delay the release of the instance of type to which self belongs.

Conclusion is, always weakify self in blocks. But remembering the reasons is important to avoid not weakifying when some reasons are forgotten.