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.