Мне иногда приходилось вручную сохранять и выпускать вещи (иногда только для отладки) и придумал следующие макросы:
#define AntiARCRetain(...) void *retainedThing = (__bridge_retained void *)__VA_ARGS__; retainedThing = retainedThing
#define AntiARCRelease(...) void *retainedThing = (__bridge void *) __VA_ARGS__; id unretainedThing = (__bridge_transfer id)retainedThing; unretainedThing = nil
Это работает с использованием __bridge_retained и __bridge_transfer для приведения вещей в и из(void *), который заставляет вещи сохраняться или создавать сильную ссылку без вызова retain.
Веселитесь, но будьте осторожны!