Sobes.tech
Junior — Middle

Môžete vysvetliť vnútornú implementáciu slabých odkazov a ako fungujú v pamäti?

sobes.tech AI

Odpoveď od AI

Slabé odkazy (weak references) v iOS (a všeobecne v Objective-C/Swift) sú odkazy na objekty, ktoré nezvyšujú počet odkazov (retain count). To znamená, že ak na objekt nie sú žiadne silné odkazy, môže byť uvoľnený z pamäte, aj keď existujú slabé odkazy.

Vnútorná implementácia:

  • Slabá referencia uchováva ukazovateľ na objekt, ale ho neudržiava v pamäti.
  • Keď je objekt, na ktorý odkazuje slabá referencia, odstránený, slabá referencia sa automaticky nastaví na nil, aby sa predišlo visiace ukazovatele.

Toto funguje vďaka mechanizmu ARC (Automatic Reference Counting), ktorý sleduje silné odkazy a upozorňuje na slabé odkazy pri uvoľnení objektu.

Príklad použitia v Swift:

class Person {
    var name: String
    init(name: String) { self.name = name }
}

class Apartment {
    weak var tenant: Person? // slabá referencia
}

var person: Person? = Person(name: "Alex")
var apartment = Apartment()
apartment.tenant = person

person = nil // objekt Person je uvoľnený, apartment.tenant sa automaticky stáva nil