Using a void* buffer and doing a bridge cast back into ARC fixes the issue where the argument is not retained properly.