Ατομική εναντίον μη ατομικών ιδιοτήτων Crash Course

Οι ιδιότητες Στόχου-C θα μπορούσαν να οριστούν ως ατομικές ή μη-ατομικές.

Ποια είναι η διαφορά μεταξύ των δύο και πώς συμπεριφέρονται οι ιδιότητες του Swift; Ατομική ή μη ατομική;

Ατομικές ιδιότητες

Ο ορισμός μιας ιδιότητας ως ατομικής θα εγγυηθεί την επιστροφή μιας έγκυρης τιμής. Παρατηρήστε ότι η έγκυρη δεν σημαίνει πάντοτε σωστή (περισσότερα για αυτή στην επόμενη ενότητα αυτής της ανάρτησης).

Αυτό επίσης δεν σημαίνει ότι οι ατομικές ιδιότητες είναι ασφαλή για τα νήματα. Διαφορετικά θέματα μπορούν να επιχειρήσουν να γράψουν και να διαβάσουν την ίδια ώρα. Μια από τις δύο τιμές θα επιστραφεί - η τιμή πριν από την αλλαγή ή η τιμή της αλλαγής

Οι ατομικές ιδιότητες υποφέρουν από μικρές επιδόσεις που επιτυγχάνονται λόγω κλειδώματος και ξεκλειδώματος πριν και μετά τη ρύθμιση / λήψη μιας αξίας.

Η ατομική είναι η προεπιλεγμένη συμπεριφορά για τις ιδιότητες - αυτό παίρνετε αν δεν καθορίσετε τίποτα.

Ατομικές ιδιότητες και θέματα Νήματα

Ας υποθέσουμε ότι έχουμε μια ατομική ιδιοκτησία:

σημείο = CGPoint (χ: 10, γ: 10)

Στην εφαρμογή μας έχουμε τρία θέματα που προσπαθούν ταυτόχρονα να έχουν πρόσβαση στην ιδιότητα του σημείου.

  • Το νήμα Α προσπαθεί να διαβάσει την ιδιότητα CGPoint
  • Το νήμα Β είναι σημείο ρύθμισης = CGPoint (x: 1, y: 1)
  • Το νήμα C είναι σημείο ρύθμισης = CGPoint (x: 5, y: 5)

Το μεγάλο ερώτημα είναι - τι θα επιστραφεί στο νήμα Α;

Μία από τις ακόλουθες τρεις τιμές:

(χ = 10, γ = 10)
(χ = 1, γ = 1)
(χ = 5, γ = 5)

Ένα άλλο ερώτημα που μπορούμε να ρωτήσουμε είναι - ποια θα είναι η τελική αξία της ιδιότητας του σημείου;

Μία από τις ακόλουθες δύο τιμές:

(χ = 1, γ = 1)
(χ = 5, γ = 5)

Μη ατομικές ιδιότητες

Οι μη ατομικές ιδιότητες δεν παρέχουν καμία εγγύηση σχετικά με την επιστρεφόμενη αξία. Μπορεί να είναι η σωστή τιμή, μια μερικώς γραπτή τιμή ή ακόμα και κάποια τιμή σκουπιδιών.
Όπως τα περισσότερα πράγματα που δεν είναι ασφαλή - αυτό έρχεται με την αυξημένη ταχύτητα πρόσβασης σε αυτές τις ιδιότητες.

Μη Ατομικές Ιδιότητες και Νήματα Παράδειγμα

Ας πάρουμε την ίδια ιδιότητα σημείο και τα ίδια τρία νήματα κάνουν τα ίδια ακριβώς πράγματα όπως στο παράδειγμα των ατομικών ιδιοτήτων.

Τι θα επιστραφεί στο νήμα Α;

Αγνωστος! Μπορεί να είναι μία από τις τρεις διαφορετικές τιμές στο προηγούμενο παράδειγμα. Θα μπορούσε ακόμη και να είναι (x = 5, y = 1) δύο νήματα προσπαθούν να ορίσουν την τιμή ταυτόχρονα. Η αξία έχει γραφεί εν μέρει και επιστρέφουμε μια μερικώς γραπτή αξία.

Πώς το κάνει ο στόχος-C runtime;

Ας δούμε τη μέθοδο "set value" για την ώρα του στόχου-C.

Παρατηρήστε πώς οι μη ατομικές ιδιότητες καθορίζουν άμεσα την αξία της ιδιότητας ενώ η ατομική ιδιοκτησία χρησιμοποιεί κλειδαριές για να προστατεύσει τη λειτουργία που έχει οριστεί.

Τι γίνεται με το Swift;

Οι ιδιότητες Swift είναι μη ατομικές από προεπιλογή.
Αλλά - Σύμφωνα με τη χρήση του Swift με το κακάο της Apple και του αντικειμενικού-C (Swift 3.1):

Τα χαρακτηριστικά ιδιότητας ιδιοκτησίας ατομικής (ατομικής και μη-ατομικής) δεν αντικατοπτρίζονται στην αντίστοιχη δήλωση ιδιοκτησίας Swift, αλλά οι εγγυήσεις ατομικότητας της εφαρμογής του Στόχου-C εξακολουθούν να ισχύουν όταν η εισαγόμενη ιδιοκτησία έχει πρόσβαση από το Swift.

Έτσι - αν ορίζετε μια ατομική ιδιότητα στο Στόχο-C, θα παραμείνει ατομική όταν χρησιμοποιείται από το Swift.