Որ դեպքերում անհրաժեշտ է բացահայտորեն օգտագործել 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);