Я пишу код, предназначенный для работы как в ARC, так и в сборке мусора.
Вот фрагмент кода, который использует Core Foundation, поскольку он может быть написан специально для ARC:
CFTypeRef ref=CFCopySomething();
// At this point ref has retain count 1.
id obj=(__bridge_transfer id)ref;
// Ref still has retain count 1 but is now managed by ARC.
[obj doSomething];
// ARC will release ref when done.
Похоже, это эквивалентно:
CFTypeRef ref=CFCopySomething();
// At this point ref has retain count 1.
id obj=(__bridge id)ref;
// Now ref has retain count 2 due to assigning to strong variable under ARC.
CFRelease(ref)
// Now ref has retain count 1.
[obj doSomething];
// ARC will release ref when done.
Преимущество последнего в том, что вызов CFRelease позволяет GC собирать объект. Но я не уверен, что вызову CFRelease после передачи в ARC с назначением через мост.
Это определенно работает. Этот код в порядке?