Junior — Middle
Ako implementovať pridanie objektu do poľa tak, aby to nevedie k zvýšeniu počtu pevných odkazov na neho?
sobes.tech AI
Odpoveď od AI
Ak chcete pridať objekt do poľa bez zvýšenia počtu silných odkazov naň, môžete použiť pole slabých odkazov. Na iOS sa to často robí pomocou NSPointerArray s možnosťou slabých odkazov alebo obalením objektov do slabých kontajnerov.
Príklad s NSPointerArray:
let weakArray = NSPointerArray.weakObjects()
class MyObject {}
var obj = MyObject()
weakArray.addPointer(Unmanaged.passUnretained(obj).toOpaque())
// Teraz weakArray obsahuje slabý odkaz na obj, bez zvyšovania počtu silných odkazov
Týmto spôsobom objekty v poli nie sú držané silno, a keď sa objekt uvoľní, odkaz sa automaticky stáva nil.
Ak používate bežné pole [MyObject], pridanie objektu do neho zvýši počet silných odkazov, čo nie je vhodné pre tento úlohu.