You should only use a weak reference to self
, if self
will hold on to a reference of the block.
In your example, you are not keeping a reference to your block in self
, you are only using blocks inline with the UIView animateWithDuration:
, and as such there is no need to use __weak myViewController *weakSelf = self;
Why is this the case? Because a block will retain strong references to any variables it uses from the class using the block. This includes self
. Now if the class instance itself keeps a strong reference to the block, and the block keeps a strong reference to the class instance, you have a retain cycle, which will cause memory leaks.