Ի՞նչ է unowned-ը Swift-ի համատեքստում։
sobes.tech AI
Պատասխան AI-ից
Unowned վերաբերում է Swift-ում (ARC) ավտոմատ հիշողության կառավարությանը: Unowned հղումները օգտագործվում են ուժեղ հղումների ցիկլերը կանխելու համար, երբ երկու օբյեկտ ուժեղ հղում են միմյանց: Unowned հղումը չի ավելացնում հղման հաշվիչը օբյեկտի համար: Վերած weak հղման, unowned հղումը միշտ ենթադրում է, որ ցույց է տալիս գոյություն ունեցող օրինակ, եթե օրինակ, որի վրա հղում է 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 ունի unowned հղում Department-ի նկատմամբ: Քանի որ Course-ը չի կարող գոյություն ունենալ առանց Department-ի (գաղափարապես), և Department-ը կառավարում է Course-ի կյանքի ցիկլը courses զանգվածի միջոցով, այստեղ օգտագործումը unowned տեղին է: Սա կանխում է ուժեղ ցիկլային հղումները accounting և introToAccounting միջև: Երբ accounting դառնում է nil, Department-ի օբյեկտը ազատվում է, և այնուհետև Course-ի օբյեկտը նույնպես ազատվում է, քանի որ այլ ուժեղ հղումներ չեն մնում։