You should only use a weak reference to
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.