Sobes.tech
Junior — Middle

Όλοι οι τύποι δεδομένων που αποθηκεύουν τιμές χρησιμοποιούν απαραίτητα τον μηχανισμό αντιγραφής κατά την ανάθεση ή τη μεταβίβαση;

sobes.tech AI

Απάντηση από AI

Δεν χρησιμοποιούν όλοι οι τύποι δεδομένων μηχανισμό αντιγραφής κατά την ανάθεση ή τη μεταφορά. Στο iOS (και Swift), διακρίνονται οι τύποι αξίας (value types) και οι τύποι αναφοράς (reference types).

  • Τύποι αξίας (π.χ. δομές, enumerations, βασικοί τύποι όπως το Int, Double) αντιγράφονται κατά την ανάθεση ή τη μεταφορά — δημιουργείται ένα νέο αντίγραφο των δεδομένων.
  • Τύποι αναφοράς (π.χ. κλάσεις) αντιγράφουν μόνο την αναφορά στο αντικείμενο, όχι το ίδιο το αντικείμενο. Έτσι, πολλές μεταβλητές μπορούν να δείχνουν στο ίδιο αντικείμενο στη μνήμη.

Παράδειγμα σε Swift:

struct Point { var x: Int; var y: Int }
class Person { var name: String
    init(name: String) { self.name = name }
}

var p1 = Point(x: 0, y: 0)
var p2 = p1 // αντιγραφή της τιμής
p2.x = 10
print(p1.x) // 0

var person1 = Person(name: "Alice")
var person2 = person1 // αντιγραφή της αναφοράς
person2.name = "Bob"
print(person1.name) // Bob

Επομένως, ο μηχανισμός αντιγραφής εφαρμόζεται μόνο στους τύπους αξίας, ενώ οι τύποι αναφοράς χρησιμοποιούν τη μεταφορά αναφοράς.