Sobes.tech
Junior — Middle

У којим ситуацијама је неопходно јасно користити 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 Foundation koji ne podržavaju direktno ARC. U tim slučajevima, potrebno je ručno upravljati memorijom pomoću CFBridgingRetain i CFBridgingRelease.

  • Prilikom pisanja koda u Objective-C koristeći __bridge_retained i __bridge_transfer za 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 weak i unowned.

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);