Sobes.tech
Junior — Middle

Эмне үчүн Strong жана Weak шилтемелердин түрлөрү эс тутумду башкаруу жана шилтеме моделинде айырмаланат?

sobes.tech AI

AIден жооп

Strong-байланыш — бул объектке карата жөнөкөй күчтүү байланыс болуп саналат, ал бул объекттин шилтемелер санын (retain count) көбөйтөт. Эгер кеминде бир күчтүү байланыс болсо, объект жадыдан өчүрүлбөйт.

Weak-байланыш — бул алсыз байланыс, ал объекттин шилтемелер санын көбөйтпөйт. Ал сактоо циклинин (retain cycles) алдын алуу үчүн колдонулат. Эгер weak-байланыш менен көрсөтүлгөн объект өчүрүлсө, ал автоматтык түрдө nil болот.

Swiftте мисал:

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

class Apartment {
    let unit: String
    weak var tenant: Person?  // цикли алдын алуу үчүн weak байланышы
    init(unit: String) { self.unit = unit }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john  // weak-байланыш

Мында, weak-байланыш tenant Person объектисин кармабайт, бул жадынын агып кетишин алдын алат.