Sobes.tech
Junior — Middle

Որ դեպքերում անհրաժեշտ է բացահայտորեն օգտագործել retain և release-ը ավտոմատ հիշողության կառավարում (ARC) համակարգում iOS հարթակում:

sobes.tech AI

Պատասխան AI-ից

iOS միջավայրում ARC (Ավտոմատ Հղումի Հաշվարկ) օգտագործելիս, ծրագրավորողը սովորաբար ձեռքով չի կառավարում retain և release-ները — դա անում է կոմպիլյատորը: Այնուամենայնիվ, հազվագյուտ դեպքերում կարող է անհրաժեշտ լինել այդ մեթոդների բացահայտ օգտագործումը.

  • Նվազ մակարդակի API-ների հետ փոխազդեցություն Objective-C-ում, որտեղ ARC-ն չի կարող ճիշտ որոշել օբյեկտի կյանքի տևողությունը, օրինակ, երբ օգտագործվում են Core Foundation օբյեկտներ, որոնք ուղղակիորեն չեն աջակցում ARC-ին: Այդ դեպքում անհրաժեշտ է ձեռքով կառավարել հիշողությունը CFBridgingRetain և CFBridgingRelease-ի միջոցով:

  • Երբ գրում եք Objective-C կոդ __bridge_retained և __bridge_transfer-ի օգտագործմամբ ARC և Core Foundation տիպերի փոխարկման համար:

  • Նվազ դեպքերում, երբ իրականացնում եք սեփական դասեր ոչ ստանդարտ հիշողության կառավարման հետ կամ խուսափում եք ուժեղ հղումային շրջաններից (retain cycles), թեև դրա համար սովորաբար օգտագործվում են weak և unowned:

Ընդհանուր առմամբ, ժամանակակից ARC-ով ծրագրերում ձեռքով retain և release-ի օգտագործումը գրեթե անպետք է և նույնիսկ արգելվում է կոմպիլյատորով: Եթե դա անհրաժեշտ է, ավելի լավ է վերանայել ճարտարապետությունը կամ օգտագործել հատուկ կամուրջներ Core Foundation-ի համար:

Օրինակ Core Foundation-ով օգտագործման:

CFStringRef cfStr = CFStringCreateWithCString(NULL, "Hello", kCFStringEncodingUTF8);
NSString *nsStr = (__bridge_transfer NSString *)cfStr; // ARC-ով կառավարվում է
// Բան առանց __bridge_transfer, անհրաժեշտ է ձեռքով կանչել CFRelease(cfStr);