Correct block operation implementation that retains 'self' but doesn't create retain cycles