avoiding retain cycle when using blocks