Протокол болгон талаага алсыз шилтемени кантип түзүү керек?
sobes.tech AI
AIден жооп
Сиз протоколдун түрүндөгү талааны жарыялоо алдында weak же unowned ачкыч сөздөрүн колдонушуңуз мүмкүн.
protocol MyProtocol: AnyObject { // Протокол класстарга чектелиши керек
func doSomething()
}
class MyClass {
weak var delegate: MyProtocol? // MyProtocol түрүндөгү талаага алсыз шилтеме
unowned var helper: MyProtocol // Менчик эмес шилтеме MyProtocol түрүндөгү талаага (эгер сиз объект дайыма бар экенине ишенсеңиз)
}
Маанилүү, протокол класстарга чектелиши керек (: AnyObject), ошондуктан алсыз же менчик эмес шилтемелерди колдонуу мүмкүн болот. Бул протоколду ишке ашыруучү түрдүн шилтеме түрү экенин, баалуу түр эмес экенин камсыздайт.
Протокол түрүндөгү талаа үчүн, weak колдонулат, эгерде шилтеме кылынган объект алгач бошотулушу мүмкүн болсо, ал объектти бошотуу алда канча эрте болот. Эгер шилтеме кылынган объект бошотулса, талаа автоматтык түрдө nil болот.
unowned колдонулат, эгер сиз ишенсеңиз, шилтеме кылынган объект дайыма ошол же узак мөөнөттүү жашоо циклине ээ болот, ал объектти камтыган объектке салыштырмалуу. unowned колдонуу гана коопсуз, эгер сиз циклик шилтемелердин жоктугун кепилдесеңиз жана шилтеме кылынган объект дайыма жарактуу болот деп ишенсеңиз. Эгер объект бошотулуп, сиз ага unowned шилтемеси аркылуу кирүүгө аракет кылсаңыз, ката кетет.
Көпчүлүк учурларда, weak делегаттар жана башка окшош үлгүлөр үчүн колдонулат.