Sobes.tech
Junior — Middle

Կարո՞ղ է իրականացնել թույլ հղում զանգվածի օբյեկտին։

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 կամ ստեղծել սեփական կառուցվածքներ թույլ հղումներով։