Sobes.tech
Junior — Middle

Lehetséges-e gyenge hivatkozást megvalósítani egy tömbobjektumra?

sobes.tech MI

Válasz az MI-től

Az iOS (Objective-C vagy Swift) környezetben a gyenge hivatkozások (weak) általában az objektumokra alkalmazódnak, hogy elkerüljék a memória ciklusokat és szivárgásokat. Azonban a tömbök (NSArray, NSMutableArray vagy Array Swiftben) alapértelmezés szerint erős hivatkozásokat tárolnak elemeikre.

A gyenge hivatkozásokkal rendelkező tömb megvalósításához speciális tárolókat lehet használni, például az NSPointerArray-t gyenge hivatkozási lehetőséggel. Az NSPointerArray lehetővé teszi gyenge hivatkozások tárolását objektumokra, és automatikusan eltávolítja azokat, amikor az objektum felszabadul.

Példa Objective-C-ben:

NSPointerArray *weakArray = [NSPointerArray weakObjectsPointerArray];

NSObject *obj = [[NSObject alloc] init];
[weakArray addPointer:(__bridge void * _Nullable)(obj)];

// Amikor az obj felszabadul, a weakArray automatikusan frissül

Swiftben az objektumokat gyenge tárolókba csomagolhatjuk, vagy az NSPointerArray-t hídon keresztül használhatjuk:

let weakArray = NSPointerArray.weakObjects()
let obj = NSObject()
weakArray.addPointer(Unmanaged.passUnretained(obj).toOpaque())

Így nincs közvetlen gyenge hivatkozás egy normál tömbre, de az NSPointerArray használható, vagy saját struktúrákat hozhatunk létre gyenge hivatkozásokkal.