Junior
Kur tiek glabāti datu tipi Swift?
sobes.tech AI
Atbilde no AI
Swift datu tipi tiek glabājas divās galvenajās atmiņas jomās: stekā un kaudzē.
Steks
- Vērtību tipi (Value types):
struct(struktūras)enum(izvēles)- Pamattipi, piemēram,
Int,Double,Bool,String(īsās rindas var glabāt tieši stekā optimizācijai)
- Dati tiek glabāti tieši stekā izpildes secībā.
- Atmiņas piešķiršana un atbrīvošana notiek automātiski un ļoti ātri (LIFO - Last In, First Out).
Kaudze
- Atsauces tipi (Reference types):
class(klases)- Funkcijas un slēdži (Closures)
- Objekti (
AnyObject)
- Objekti tiek glabāti kaudzē, bet stekā — tikai norādes uz tiem.
- Atmiņas piešķiršana un atbrīvošana notiek dinamiski un ir pārvaldāma sistēmas (Automatic Reference Counting - ARC).
- Pieeja datiem kaudzē ir netieša, caur norādi.
Īpatnības
- Piešķirot vērtību tipu, tiek kopēta visa vērtība.
- Piešķirot atsauces tipu, tiek kopēta tikai norāde, abi objekti norāda uz to pašu atmiņas vietu kaudzē.
- ARC uzrauga stipro norāžu skaitu uz objektiem kaudzē un automātiski atbrīvo atmiņu, kad norādes vairs nav.
// Piemērs vērtību tipam - glabājas stekā
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 10, y: 20)
var p2 = p1 // Kopē visa vērtība
p2.x = 30 // p1 nemainās
print("p1: \(p1), p2: \(p2)") // Izvade: p1: Point(x: 10, y: 20), p2: Point(x: 30, y: 20)
// Piemērs atsauces tipam - glabājas kaudzē
class Circle {
var radius: Double
init(radius: Double) {
self.radius = radius
}
}
var c1 = Circle(radius: 5.0)
var c2 = c1 // Tikai norāde
c2.radius = 10.0 // c1 arī mainās, jo abi norāda uz to pašu objektu kaudzē
print("c1.radius: \(c1.radius), c2.radius: \(c2.radius)") // Izvade: c1.radius: 10.0, c2.radius: 10.0