Sobes.tech
Junior — Middle

რის დროს არის აუცილებელი explicitly გამოიყენოთ retain და release ავტომატური მეხსიერების მართვაში (ARC) iOS პლატფორმაზე?

sobes.tech AI

პასუხი AI-სგან

ARC (Автоматты шилтемелердин эсептелиши) менен iOS чөйрөсүндө, иштеп чыгуучу адатта retain жана release'ти кол менен башкарбайт — бул компилятор тарабынан жасалат. Бирок, сейрек учурларда, бул ыкмаларды ачык колдонуу керек болушу мүмкүн:

  • Objective-Cдеги төмөнкү деңгээл APIлер менен өз ара аракеттенүү, анда ARC объекттин жашоо мөөнөтүн туура аныктай албайт, мисалы, Core Foundation объекттерин колдонууда, алар түздөн-түз ARC'ны колдобойт. Мындай учурда, эс тутумду кол менен башкаруу үчүн CFBridgingRetain жана CFBridgingRelease колдонулат.

  • __bridge_retained жана __bridge_transfer колдонуп, ARC жана Core Foundation түрлөрү арасында конвертациялоо үчүн Objective-C код жазууда.

  • Аз кездешүүчү учурларда, өзгөчө класс түзүүдө, стандарттык эмес эс тутумду башкаруу менен же күчтүү шилтемелер циклин (retain cycles) алдын алуу үчүн, бирок бул үчүн көбүнчө weak жана unowned колдонулат.

Жалпысынан, заманбап ARC колдонулган тиркемелерде, retain жана release кол менен колдонуу дээрлик кереги жок жана ал тийиштүү эмес. Эгер керек болсо, архитектураны кайра карап чыгуу же атайын көпүрөлөрдү колдонуу жакшы.

Core Foundation менен мисал:

CFStringRef cfStr = CFStringCreateWithCString(NULL, "Hello", kCFStringEncodingUTF8);
NSString *nsStr = (__bridge_transfer NSString *)cfStr; // ARC башкарууну алат
// __bridge_transfer колдонбосо, CFRelease(cfStr) кол менен чакырылышы керек