Я пишу код, предназначенный для работы как в 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 с назначением с мостовым приведением.
Это, похоже, работает.Этот код в порядке?