Кайсы учурларда командада жадатты башкарууда weak же unowned колдонуу артыкчылыкка ээ болот?
sobes.tech AI
AIден жооп
iOS-та, ARC (Автоматтык шилтемелердин эсептөө) аркылуу эс тутумду башкарууда, объекттердин кармоо циклин алдын алуу үчүн, алсыз (weak) жана коопсуз эмес (unowned) шилтемелер колдонулат.
-
weak шилтемеси, белгилүү бир учурда nil болушу мүмкүн болгон учурда колдонулат, башкача айтканда, шилтемелеген объект жоголушу мүмкүн. Алсыз шилтемелер объект бошотулганда автоматтык түрдө nil болот. Бул байланышы милдеттүү эмес жана объект жоголушу мүмкүн болгон учурларга ылайыктуу.
-
unowned шилтемеси, ар дайым бар объектке көрсөтүшү керек жана nil болбойт. Эгер объект бошотулуп калса жана unowned шилтемеси калса, бул ишке ашырылуу учурунда катага алып келет. Жалпысынан, unowned, шилтемеленген объекттин жашоо цикли, шилтемени ээси менен салыштырганда, узак болот деп кепилденген учурларда колдонулат.
мисал:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // weak, анткени ата-эне эрте эле жоголушу мүмкүн
}
// же
class Customer {
let card: CreditCard
init() {
card = CreditCard(customer: self)
}
}
class CreditCard {
unowned let customer: Customer // unowned, анткени карта, кардарсыз болбойт
init(customer: Customer) {
self.customer = customer
}
}
жыйынтык:
- Эгер шилтеменин nil болушу мүмкүн болсо жана кармоо циклин алдын алуу керек болсо, weak колдонуу керек.
- Эгер шилтеменин дайыма жарактуу болушу керек жана объекттин узактыгы шилтемеден узак болсо, unowned колдонуу керек.