Milyen helyzetekben szükséges kifejezetten használni a retain és release parancsokat az automatik memória kezelés (ARC) során az iOS platformon?
sobes.tech MI
Válasz az MI-től
Az iOS környezetben ARC (Automatikus Hivatkozás Számlálás) esetén a fejlesztő általában nem kezeli manuálisan a retain és release műveleteket — ezt a fordító végzi. Azonban ritka esetekben szükség lehet ezeknek a módszereknek a kifejezett használatára:
-
Alacsony szintű API-kkal való interakció Objective-C-ben, ahol az ARC nem tudja helyesen meghatározni az objektum életciklusát, például
Core Foundationobjektumok használatakor, amelyek nem támogatják közvetlenül az ARC-t. Ilyenkor manuálisan kell kezelni a memóriátCFBridgingRetainésCFBridgingReleasesegítségével. -
Az Objective-C kód írása során
__bridge_retainedés__bridge_transferhasználatával az ARC típusok és a Core Foundation közötti konverzióhoz. -
** Ritka esetekben, saját osztályok megvalósításakor, nem szokványos memória kezeléssel vagy erős hivatkozási ciklusok (retain cycles) elkerülése érdekében, bár ehhez általában
weakésunownedtípusokat használnak.**
Általánosságban elmondható, hogy a modern ARC alkalmazásokban a retain és release manuális használata szinte szükségtelen, sőt a fordító által tiltott. Ha mégis szükség van rá, érdemes az architektúrát átgondolni vagy speciális hidakat használni a Core Foundation-hez.
Példa Core Foundation használatára:
CFStringRef cfStr = CFStringCreateWithCString(NULL, "Hello", kCFStringEncodingUTF8);
NSString *nsStr = (__bridge_transfer NSString *)cfStr; // az ARC átveszi a kezelést
// __bridge_transfer nélkül manuálisan kell CFRelease(cfStr) hívni