Can you type the `buffer` parameter as `__unsafe_unretained id *`, following the convention that we and Apple use for C array types?