Use __block __weak to better avoid recursive block warning