Sto scrivendo codice destinato a funzionare sia in ARC che in Garbage Collection.Ponticello ARC/GC e Core Foundation dual mode
Ecco un po 'di codice che utilizza Nucleo Fondazione come potrebbe essere scritto appositamente per 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.
Sembra che questo è equivalente a:
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.
Il vantaggio di queste ultime essere che la chiamata CFRelease consente al GC di raccogliere l'oggetto. Ma non sono sicuro di chiamare il CFRelease dopo il trasferimento ad ARC con l'assegnazione cast-bridge.
Certamente sembra funzionare. Questo codice è OK?
Vale la pena ricordare ai lettori che i cast di '__bridge' non hanno alcun significato su unità di compilazione non ARC, cioè il compilatore semplicemente li ignorerà durante la compilazione con' --objc-gc', rendendo compatibile il secondo snippet di codice con sia ARC che GC. (Sto solo dicendo che ho dovuto cercare.) – paulotorrens