Use of weak self to avoid strongly captured over-retained self in blocks