Junior
Тафовут байни намудҳои истинодӣ ва намудҳои арзишӣ дар чист?
sobes.tech AI
Ҷавоб аз AI
Ишора, у ёрда сақланган маълумотларга ишора қиладиган хотира манзилини сақлайди. Ҳақиқатан, ишорани сақловчи ўзгарувчи фақат ушбу манзилни эгаллайди, маълумотларни эмас. Ишора тури ўзгарувчига топширилганда, ишора нусхалаб олинади, маълумотлар эмас. Ишора кўрсатадиган маълумотлардаги ўзгаришлар, бу ишорани сақловчи барча ўзгарувчиларда акс этмоқда.
Қиммат тури тўғридан-тўғри маълумотларни сақлайди. Қиммат тури ўзгарувчига топширилганда, маълумотларнинг ўзи нусхалаб олинади. Бир қиммат тури бўлган ўзгарувчадаги ўзгаришлар, бу нусхани олган бошқа ўзгарувчиларга таъсир қилмайди.
| Хусусият | Ишора тури | Қиммат тури |
|---|---|---|
| Сақлаш | Маълумотларга ишора | Ўзи маълумотлар |
| Топшириш | Ишора нусхасини олиш | Маълумотларни нусхалаш |
| Ўзгариш | Барча ишораларга таъсир қилади | Нусхаларга таъсир қилмайди |
| Жойлашув | Heapда | Stackда |
| Эркинлаштириш | ARC / мусобақа йиғувчи | Автоматик равишда, кўрсатилган ҳудуддан чиқишда |
| Swift мисоллари | class, closure | struct, enum, tuple, асосий турлар (Int, Bool, String ва бошқалар) |
// Ишора тури мисоли (синф)
class ReferenceType {
var value: Int
init(value: Int) {
self.value = value
}
}
let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // Ишора нусхалаб олинади
ref2.value = 20 // ref1 ва ref2 кўрсатадиган маълумотлар ўзгаради
print(ref1.value) // Чиқиш: 20
print(ref2.value) // Чиқиш: 20
// Қиммат тури мисоли (қурилма)
struct ValueType {
var value: Int
}
var val1 = ValueType(value: 10)
var val2 = val1 // Маълумотлар нусхалаб олинади
val2.value = 20 // Фақат val2даги маълумотлар ўзгаради
print(val1.value) // Чиқиш: 10
print(val2.value) // Чиқиш: 20