რის დროს არის აუცილებელი 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) кол менен чакырылышы керек