Junior
Фарқи байни навъҳои истинод ва навъҳои арзиш чист?
sobes.tech AI
Ҷавоб аз AI
Намудҳои арзиш (Value Types) ҳангоми таъин кардан ё гузаронидан ба функсия нусхабардорӣ мешаванд. Ҳар як намуна нусхаи хоси маълумот дорад.
Намудҳои истинод (Reference Types) ҳангоми таъин кардан ё гузаронидан ба функсия, ба намунаи маълумоти якхела ишора мекунанд. Тағйирот дар маълумот тавассути як ишора ба ҳамаи ишораҳои дигар ба ҳамин намуна таъсир мерасонад.
| Хусусият | Намуди арзиш (Value Type) | Намуди истинод (Reference Type) |
|---|---|---|
| Равоншиканӣ дар таъин кардан/гузаронидан | Нусхабардорӣ | Ишорагузорӣ |
| Ҷойгиршавӣ дар хотира | Стек (Heap) | Ҳамвор (Stack) |
| Идоракунии хотира | Автоматӣ (аз тариқи стек) | Автоматӣ (ARC) |
| Масаланҳо дар Swift | struct, enum, tuple |
class, func, closure |
// Намунаи Намуди Арзиш (Struct)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 нусхаи p1-ро мегирад
p2.x = 10 // Тағйирот дар p2 ба p1 таъсир намерасонад
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
// Намунаи Намуди истинод (Класс)
class Coordinate {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2 ба ҳамон объект ишора мекунад, ки c1
c2.x = 10 // Тағйирот дар c2 ба c1 таъсир мерасонад, чунки ҳар ду ба як объект ишора мекунанд
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10