Կարո՞ղ է իրականացնել թույլ հղում զանգվածի օբյեկտին։
sobes.tech AI
Պատասխան AI-ից
iOS-ում (Objective-C կամ Swift) թույլ թղթապանակները (weak) սովորաբար կիրառվում են օբյեկտների վրա՝ հիշողության շրջանների և հիշողության արտահոսքների կանխարգելման համար: Սակայն, զանգվածները (NSArray, NSMutableArray կամ Array Swift-ում) ըստ նախնական կարգի պահում են ուժեղ հղումներ իրենց տարրերին:
Թույլ թղթապանակներով զանգվածի իրականացում համար, կարելի է օգտագործել մասնագիտացված կոնտեյներներ, օրինակ՝ NSPointerArray՝ թույլ հղումների ընտրությամբ: NSPointerArray թույլ է տալիս պահել թույլ հղումներ օբյեկտներին և ավտոմատ կերպով հեռացնել դրանք, երբ օբյեկտը ազատվում է:
Objective-C-ում օրինակ:
NSPointerArray *weakArray = [NSPointerArray weakObjectsPointerArray];
NSObject *obj = [[NSObject alloc] init];
[weakArray addPointer:(__bridge void * _Nullable)(obj)];
// Երբ obj ազատվի, weakArray-ը ավտոմատ կերպով թարմացվում է
Swift-ում, կարող եք օբյեկտները պատել թույլ կոնտեյներների մեջ կամ օգտագործել NSPointerArray՝ միջնորդության միջոցով:
let weakArray = NSPointerArray.weakObjects()
let obj = NSObject()
weakArray.addPointer(Unmanaged.passUnretained(obj).toOpaque())
Այսպիսով, սովորական զանգվածի վրա ուղղակի թույլ հղում չկա, բայց կարելի է օգտագործել NSPointerArray կամ ստեղծել սեփական կառուցվածքներ թույլ հղումներով։