Итак, во-первых, я хотел бы отметить, что этот тип вещей проще сделать с помощью методов анимации на основе блоков. Для iOS4 и iOS5 Apple рекомендует использовать эти новые методы вместо .
Но чтобы ответить на ваш конкретный вопрос, параметр context является пустым *. ARC не поддерживает (не может поддерживать) управление указателями void *, поэтому, когда вы передаете свой contextPoint (который является NSValue *) этому методу, ARC фактически теряет его.
Компилятор разрешит это с помощью броска моста. Но вы также должны убедиться, что ваша «contextPoint» доживет до этого метода, поэтому вам нужен конкретный каст __bridge_retained, то есть каст с +1 чистым счетом удержания:
[UIView beginAnimation:nil context:(__bridge_retained void *)contextPoint];
Это решает непосредственную проблему, ожидайте, что теперь вы будете пропускать эту contextPoint. Таким образом, в ваших animationDidStart:context:
или animationDidStop:finished:context:
(где бы вы ни собирались использовать эту contextPoint) вам нужно сбалансировать этот счет +1 с чем-то вроде этого:
NSValue *contextPoint = (__bridge_transfer NSValue *)context;
Это соединяет этот объект обратно с контролем ARC, и __bridge_transfer говорит ARC освободить этот объект, чтобы сбалансировать __bridge_retained от ранее.
Опять же, вместо этого используйте методы на основе блоков, и пусть ARC и блоки позаботятся об этом за вас. Они уже знают, как правильно захватывать и сохранять нужные вам объекты в ваших блоках анимации или завершения.
Надеюсь, это имеет смысл.