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 Foundationobjekte, mis ei toeta otseselt ARC-d. Sellistel juhtudel tuleb mälu käsitsi hallataCFBridgingRetainjaCFBridgingReleaseabil. -
Kirjutades Objective-C koodi, kasutades
__bridge_retainedja__bridge_transferARC 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
weakjaunowned.
Ü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);