Sobes.tech
Junior

Swiftте weak эс тутуму өзгөрмөсү эмнеге тиешелүү?

sobes.tech AI

AIден жооп

weak өзгөрмөсү объекттердин ортосундагы күчтүү шилтемелер циклин бузуу үчүн колдонулат; бир объект башка объектке күчтүү шилтеме болсо жана ал кайра ошол эле учурда күчтүү шилтемеге ээ болсо.

weakтин негизги өзгөчөлүктөрү:

  • Шилтемелер санын көбөйтпөйт: weak колдонуу объектке күчтүү шилтемелердин санын көбөйтпөйт.
  • nil болушу мүмкүн: Зәиф шилтеме (Optional) болуп, автоматтык түрдө nil болуп калат, объект ал шилтемеге ээ болсо, ал деинициализацияланганда.
  • Ата-эне/баласы байланыштарында колдонулат: Көп учурда, баланын объектисине шилтеме ата-энесине барганда колдонулат, күчтүү шилтемелер циклин алдын алуу үчүн.
  • var катары жарыялануусу керек: Анткени зәиф шилтеме nil болушу мүмкүн, ал өзгөрмө (var) катары жарыялануусу керек, let эмес.

Колдонуу мисалы:

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
        print("\(name) башталууда")
    }

    deinit {
        print("\(name) жыйынтыкталууда")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Зәиф шилтеме

    init(unit: String) {
        self.unit = unit
        print("Квартира \(unit) башталууда")
    }

    deinit {
        print("Квартира \(unit) жыйынтыкталууда")
    }
}

Apartment классынын ичинде weak var tenant: Person? болбосо, күчтүү шилтемелер цикли түзүлүп, Person жана Apartment үлгүлөрү башка күчтүү шилтемелер жок болсо, деинициализацияланбай калат. weak аркылуу, Person үлгүсү деинициализацияланганда, Apartment ичиндеги tenant шилтемеси автоматтык түрдө nil болот.