Ziminji,
У меня была такая же проблема, вот как я натолкнулся на этот вопрос.
Я решил ее, сохранив определение objects
параметр как есть (например, сохраняя его как id *
) и вместо этого выполняя двойное приведение с использованием указателя void.
Итак, пока это вызывает у меня ошибки:
state->itemsPtr = (__unsafe_unretained id *)buffer // Error
Это сработалокрасиво:
state->itemsPtr = (__unsafe_unretained id *)(void *)buffer // No error
Отказ от ответственности: я не эксперт по ARC, и я не могу гарантировать вам, что это не вызовет проблем с количеством ссылок.Тем не менее, , по-видимому, работает правильно в моем тестировании, и он определенно компилируется без предупреждений.
Кстати, я наткнулся на эту запись из двух частей в блоге, посвященную FastПеречисление в хорошем количестве глубины:
, а также эта запись в блоге __unsafe_unretained
: