use objc_setAssociatedObject to clear the block, and this method can be invoked only after the block finished