Swift контекстинде unowned эмне?
sobes.tech AI
AIден жооп
Unowned — бул Swiftтеги (ARC) автоматтык эс тутумду башкарууга тиешелүү. Unowned шилтемелер күчтүү шилтемелер циклин алдын алуу үчүн колдонулат, эгерде эки объект бири-биге күчтүү шилтеме жасаса. Unowned шилтеме объекттин шилтеме санын көбөйтпөйт. Weak шилтемеден айырмаланып, unowned шилтеме дайыма ишенимдүү түрдө көрсөтүп тургандай, ал бар экенине ишенет; эгер ал шилтеме көрсөтүп турган объект бошотулса, аракет кылуу катага алып келет. Бул байланыштуу объекттин жашоо цикли unowned шилтемесин камтыган объекттин жашоо циклинен кеминде же тең болушу керек деген шартта колдонулат.
Кыскача колдонуу мисалы:
class Department {
var name: String
var courses: [Course] = []
init(name: String) {
self.name = name
print("\(name) бөлүмү ишке киргизилип жатат")
}
deinit {
print("\(name) бөлүмү жоюлуп жатат")
}
}
class Course {
var name: String
unowned var department: Department // Unowned шилтеме
init(name: String, department: Department) {
self.name = name
self.department = department
print("\(name) сабак ишке киргизилип жатат")
}
deinit {
print("\(name) сабак жоюлуп жатат")
}
}
var accounting: Department? = Department(name: "Accounting")
var introToAccounting: Course? = Course(name: "Introduction to Accounting", department: accounting!)
accounting!.courses.append(introToAccounting!)
accounting = nil // Эми `Department` объекти бошотулушу мүмкүн
introToAccounting = nil // Эми `Course` объекти бошотулушу мүмкүн
Бул мисалда Course Departmentка unowned шилтемесин колдонуп турат. Эгерде Course Department жок болмогон болсо, анда логикалык жактан, ал Department менен байланыштуу жана Department courses массиви аркылуу анын жашоо циклін башкарат, ошондуктан unowned колдонуу туура. Бул accounting жана introToAccounting ортосунда күчтүү цикл түзүүнү алдын алат. Эгер accounting nil болсо, Department объекти бошотулат, жана андан соң Course объекти да бошотулат, анткени башка күчтүү шилтемелер калбайт.