Sobes.tech
Junior

Swift-ში weak მეხსიერების მოდიფიკატორი რა არის?

sobes.tech AI

პასუხი AI-სგან

weak ئۆزگەرگۈچىسى نىڭ ئىشلىتىلىشى، قۇۋۋەتلىك ئۇلاش سىكللىرىنى (reference cycles) بوزۇش ئۈچۈن ئىشلىتىلىدۇ؛ بىر ئۆبژېكتنىڭ باشقا بىر ئۆبژېكتقا قۇۋۋەتلىك ئۇلىنىشى بولسا، ۋە بۇ ئۆبژېكت قايتا ئۆزىگە قۇۋۋەتلىك ئۇلىنىشقا ئىگە بولسا.

weak نىڭ ئاساسىي ئالاھىدىلىكى:

  • ئۇلاش سانىنى كۆپەيتمەيدۇ: weak نىڭ ئىشلىتىلىشى، ئۆبژېكتقا قۇۋۋەتلىك ئۇلىنىشلار سانىنى كۆپەيتمەيدۇ.
  • nil بولۇشى مۇمكىن: زەئىف ئۇلىنىش (Optional) بولۇپ، ئۆبژېكت قايتا دەئىنشىياللاشتۇرۇلغاندا، ئاپتوماتىك nil بولىدۇ.
  • ئاتا/بالا مۇناسىۋىتى ئۈچۈن ئىشلىتىلىدۇ: كۆپىنچە، بالىلار ئۆبژېكتنىڭ ئاتا-ئانىسىغا ئۇلىنىشى بولسا، قۇۋۋەتلىك ئۇلىنىش سىكللىرىنى ئالدىنى ئېلىش ئۈچۈن ئىشلىتىلىدۇ.
  • var دەپ ئېلان قىلىشى كېرەك: چۈنكى زەئىف ئۇلىنىش nil بولۇشى مۇمكىن، ئۇنى ئۆزگەرگۈچى (var) دەپ ئېلان قىلىش كېرەك، let ئەمەس.

ئىشلىتىش مىسالى:

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
        print("\(name) باشلىنىۋاتىدۇ")
    }

    deinit {
        print("\(name) تاماملاندى")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // زەئىف ئۇلىنىش

    init(unit: String) {
        self.unit = unit
        print("مۇشۇ \(unit) باشلىنىۋاتىدۇ")
    }

    deinit {
        print("مۇشۇ \(unit) تاماملاندى")
    }
}

Apartment كلاسسىدا weak var tenant: Person? بولمىسا، كۈچلۈك ئۇلىنىش سىكللىرى يارىلىدۇ، ۋە Person ۋە Apartment نۇسخىلىرى، باشقا كۈچلۈك ئۇلىنىشلار بولمىغاندا، deinitialization بولمايدۇ. weak نىڭ ياردىمى بىلەن، Person نۇسخىسى deinitialization بولغاندا، Apartment نىڭ ئىچىدىكى tenant ئۇلىنىشى ئاپتوماتىك nil بولىدۇ.