V jakých situacích je nutné explicitně používat retain a release v automatickém řízení paměti (ARC) na platformě iOS?
sobes.tech AI
Odpověď od AI
V prostředí iOS s ARC (Automatické počítání referencí) vývojář obvykle ručně neřídí retain a release — to dělá překladač. Existují však vzácné situace, kdy může být potřeba tyto metody explicitně použít:
-
Interakce s nízkoúrovňovými API v Objective-C, kde ARC nemůže správně určit dobu života objektu, například při použití objektů
Core Foundation, které přímo ARC nepodporují. V takových případech je třeba spravovat paměť ručně pomocíCFBridgingRetainaCFBridgingRelease. -
Při psaní kódu v Objective-C s použitím
__bridge_retaineda__bridge_transferpro konverzi mezi typy ARC a Core Foundation. -
V ojedinělých případech při implementaci vlastních tříd s nestandardním řízením paměti nebo při předcházení silným cyklům odkazů (retain cycles), i když k tomu se obvykle používají
weakaunowned.
Obecně platí, že v moderních aplikacích s ARC je manuální používání retain a release téměř zbytečné a dokonce zakázané kompilátorem. Pokud je to nutné, je vhodnější přehodnotit architekturu nebo použít speciální mosty pro Core Foundation.
Příklad použití s Core Foundation:
CFStringRef cfStr = CFStringCreateWithCString(NULL, "Hello", kCFStringEncodingUTF8);
NSString *nsStr = (__bridge_transfer NSString *)cfStr; // ARC převezme správu
// Bez __bridge_transfer by bylo nutné ručně zavolat CFRelease(cfStr);