Junior — Middle
Чӣ гуна ёдгирӣ барои объектҳо бо истинодҳои даврӣ дар муҳитҳои идорашаванда раванду?
sobes.tech AI
Ҷавоб аз AI
Дар муҳитҳои идорашаванда, монанди iOS бо ARC (Ҳисоби худкори истинодҳо), озод кардани хотира барои объектҳое бо истинодҳои даврӣ автоматӣ намеояд, зеро ARC наметавонад циклҳои истинодҳоро қатъ кунад.
Барои ҳалли ин масъала, истифодаи истинодҳои заиф (weak) ва беҳуқуқ (unowned) истифода мешавад, ки ҳисобкунии истинодро ба объект зиёд намекунанд. Ин имкон медиҳад, ки циклҳоро қатъ кунанд ва хотираро дуруст озод кунанд.
Масалан:
class Person {
var name: String
weak var apartment: Apartment? // истиноди заиф
init(name: String) {
self.name = name
}
}
class Apartment {
let unit: String
unowned let tenant: Person // истиноди беҳуқуқ
init(unit: String, tenant: Person) {
self.unit = unit
self.tenant = tenant
}
}
Ин ҷо, Person ва Apartment ба ҳамдигар ишора мекунанд, аммо яке аз ишораҳо заиф аст, ки аз рехтани хотира пешгирӣ мекунад.
Агар циклҳои ишораҳо қатъ нашаванд, объектҳо дар хотира бо вуҷуди набудани ишораҳои хориҷӣ мемонанд, ки ба рехтани хотира оварда мерасонад.