Junior — Middle
Эмне үчүн Strong жана Weak шилтемелердин түрлөрү эс тутумду башкаруу жана шилтеме моделинде айырмаланат?
sobes.tech AI
AIден жооп
Strong-байланыш — бул объектке карата жөнөкөй күчтүү байланыс болуп саналат, ал бул объекттин шилтемелер санын (retain count) көбөйтөт. Эгер кеминде бир күчтүү байланыс болсо, объект жадыдан өчүрүлбөйт.
Weak-байланыш — бул алсыз байланыс, ал объекттин шилтемелер санын көбөйтпөйт. Ал сактоо циклинин (retain cycles) алдын алуу үчүн колдонулат. Эгер weak-байланыш менен көрсөтүлгөн объект өчүрүлсө, ал автоматтык түрдө nil болот.
Swiftте мисал:
class Person {
var name: String
init(name: String) { self.name = name }
var apartment: Apartment?
}
class Apartment {
let unit: String
weak var tenant: Person? // цикли алдын алуу үчүн weak байланышы
init(unit: String) { self.unit = unit }
}
let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john // weak-байланыш
Мында, weak-байланыш tenant Person объектисин кармабайт, бул жадынын агып кетишин алдын алат.