Sobes.tech
Junior — Middle

Millistes olukordades on vaja selgelt kasutada retain ja release automaatse mälu haldamise (ARC) puhul iOS platvormil?

sobes.tech AI

Vastus AI-lt

iOS-i keskkonnas ARC-ga (Automaatne viitearvutamine) arendaja tavaliselt käsitsi retain ja release ei halda — seda teeb kompilaator. Siiski on harvadel juhtudel, kui nende meetodite selge kasutamine võib olla vajalik:

  • Madal taseme API-dega Objective-C-s suhtlemisel, kus ARC ei suuda objekti elutsüklit õigesti määrata, näiteks kasutades Core Foundation objekte, mis ei toeta otseselt ARC-d. Sellistel juhtudel tuleb mälu käsitsi hallata CFBridgingRetain ja CFBridgingRelease abil.

  • Kirjutades Objective-C koodi, kasutades __bridge_retained ja __bridge_transfer ARC ja Core Foundation tüüpide vahelise konversiooni jaoks.

  • Harvadel juhtudel, kui rakendate oma klasse mittestandardse mäluhaldusega või vältite tugevaid viiteid (retain cycles), kuigi selleks kasutatakse tavaliselt weak ja unowned.

Üldiselt on kaasaegsetes ARC-iga rakendustes käsitsi retain ja release kasutamine peaaegu tarbetu ning isegi keelatud kompilaatori poolt. Kui see on vajalik, on parem arhitektuuri üle vaadata või kasutada spetsiaalseid sildu Core Foundationi jaoks.

Näide Core Foundationiga:

CFStringRef cfStr = CFStringCreateWithCString(NULL, "Hello", kCFStringEncodingUTF8);
NSString *nsStr = (__bridge_transfer NSString *)cfStr; // ARC võtab üle halduse
// Ilma __bridge_transfer-ita oleks vaja käsitsi CFRelease(cfStr);