У којим ситуацијама је неопходно јасно користити retain и release у аутоматском управљању меморијом (ARC) на платформи iOS?
sobes.tech АИ
Одговор од АИ
U okruženju iOS sa ARC (Automatsko brojanje referenci), programer obično ne upravlja ručno retain i release — to radi kompajler. Međutim, postoje retke situacije kada je potrebno eksplicitno koristiti ove metode:
-
Interakcija sa niskonivojskim API-jem u Objective-C, gde ARC ne može pravilno odrediti životni vek objekta, na primer, pri korišćenju objekata
Core Foundationkoji ne podržavaju direktno ARC. U tim slučajevima, potrebno je ručno upravljati memorijom pomoćuCFBridgingRetainiCFBridgingRelease. -
Prilikom pisanja koda u Objective-C koristeći
__bridge_retainedi__bridge_transferza konverziju između ARC i Core Foundation tipova. -
U retkim slučajevima, pri implementaciji sopstvenih klasa sa nestandardnim upravljanjem memorijom ili za izbegavanje cikličnih referenci (retain cycles), iako se za to obično koriste
weakiunowned.
Uopšteno, u savremenim aplikacijama sa ARC, ručno korišćenje retain i release je gotovo suvišno i čak zabranjeno od strane kompajlera. Ako je potrebno, bolje je preispitati arhitekturu ili koristiti specijalne mostove za Core Foundation.
Primer korišćenja sa Core Foundation:
CFStringRef cfStr = CFStringCreateWithCString(NULL, "Hello", kCFStringEncodingUTF8);
NSString *nsStr = (__bridge_transfer NSString *)cfStr; // ARC će preuzeti upravljanje
// Bez __bridge_transfer, morao bi ručno pozvati CFRelease(cfStr);