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 болот.