Πριν από τη συζήτηση σχετικά με τα χαρακτηριστικά των @property, θα πρέπει να γνωρίζετε ποια είναι η χρήση του @property. @property προσφέρει έναν τρόπο για να καθορίσει τις πληροφορίες που μια κατηγορία έχει ως στόχο να ενσωματώσουν. Εάν δηλώσουν ένα αντικείμενο / μεταβλητή χρησιμοποιώντας @property, τότε αυτό το αντικείμενο / μεταβλητή θα είναι προσβάσιμα σε άλλους κλάδους εισαγωγής της κατηγορίας του. Εάν δηλώσουν ένα αντικείμενο χρησιμοποιώντας @property στο αρχείο κεφαλίδας, τότε θα πρέπει να το συνθέσει χρησιμοποιώντας @synthesize στο αρχείο εφαρμογής.
Παράδειγμα:
.h κατηγορία
@interface ExampleClass : NSObject
@property (nonatomic, retain) NSString *name;
@end
.m κατηγορία
@implementation ExampleClass
@synthesize name;
@end
Τώρα ο compiler θα συνθέσουν accessor μεθόδους για το όνομα.
ExampleClass *newObject=[[ExampleClass alloc]init];
NSString *name1=[newObject name]; // get 'name'
[obj setName:@“Tiger”];
Κατάλογος των ιδιοτήτων των @property: ατομική. nonatomic. διατηρώ. αντίγραφο. μόνο για ανάγνωση. διαβάζω γράφω. αναθέτω. ισχυρός.
ατομικό: Είναι η προεπιλεγμένη συμπεριφορά. Αν ένα αντικείμενο έχει δηλωθεί ως ατομικό τότε γίνεται το νήμα-ασφαλή. Νήμα-ασφαλή μέσα, σε μια στιγμή μόνο ένα νήμα από ένα συγκεκριμένο υπόδειγμα της κατηγορίας αυτής μπορεί να έχει τον έλεγχο του επί του αντικειμένου.
παράδειγμα:
@property NSString *name; //by default atomic
@property (atomic)NSString *name; // explicitly declared atomic
nonatomic: Δεν είναι νήμα-ασφαλή. Μπορείτε να χρησιμοποιήσετε το nonatomic χαρακτηριστικό ακίνητο για να καθορίσετε ότι συντίθεται accessors απλά να ορίσετε ή να επιστρέψει άμεσα μια τιμή, χωρίς εγγυήσεις για το τι θα συμβεί αν το ίδιο αξία πρόσβαση γίνεται ταυτόχρονα από διαφορετικά νήματα. Για το λόγο αυτό, είναι πιο γρήγορο να αποκτήσετε πρόσβαση σε μια nonatomic ιδιοκτησίας από ένα ατομικό μία.
@property (nonatomic)NSString *name;
διατηρούν: απαιτείται όταν το χαρακτηριστικό είναι ένας δείκτης σε μία μέθοδο setter object.The θα αυξήσει διατηρήσει καταμέτρηση του αντικειμένου, έτσι ώστε θα καταλαμβάνει μνήμη στην αυτόματης κυκλοφορίας πισίνα.
@property (retain)NSString *name;
Αντίγραφο: Εάν χρησιμοποιείτε το αντίγραφο, δεν μπορείτε να χρησιμοποιήσετε διατηρήσει. Χρησιμοποιώντας αντίγραφο παρουσία της κλάσης θα περιέχει το δικό του αντίγραφο. Ακόμη και αν ένα μεταβλητό χορδών έχει οριστεί και στη συνέχεια άλλαξε, η παρουσία καταγράφει ό, τι αξία έχει κατά το χρόνο που έχει οριστεί. Δεν μέθοδοι setter και κτήτορας θα συντεθεί.
@property (copy) NSString *name;
NSMutableString *nameString = [NSMutableString stringWithString:@"Liza"];
xyzObj.name = nameString;
[nameString appendString:@"Pizza"];
μόνο για ανάγνωση: Αν δεν θέλετε να επιτρέπεται η ιδιοκτησία πρέπει να αλλάξει μέσω του ρυθμιστή μέθοδο, μπορείτε να δηλώσετε την ιδιότητα μόνο για ανάγνωση.
@property (readonly) NSString *name;
ReadWrite: είναι η προεπιλεγμένη συμπεριφορά. Δεν χρειάζεται να καθορίσετε ReadWrite χαρακτηριστικό ρητά.
@property (readwrite) NSString *name;
εκχωρήσετε: θα δημιουργήσει ένα ρυθμιστή που αναθέτει την τιμή στη μεταβλητή παράδειγμα άμεσα, και όχι αντιγραφή ή η διατήρησή της. Αυτό είναι καλύτερο για πρωτόγονα είδη, όπως NSInteger και CGFloat, ή αντικείμενα που δεν σας ανήκει άμεσα, όπως συνέδρων.
@property (assign) NSInteger year;
ισχυρή: είναι μια αντικατάσταση για διατήρηση.
@property (nonatomic, strong) AVPlayer *player;
unsafe_unretained: Υπάρχουν μερικά μαθήματα στο κακάο και κακάο Touch που δεν υποστηρίζουν ακόμα αδύναμη αναφορές, πράγμα που σημαίνει ότι δεν μπορεί να κηρύξει μια αδύναμη ιδιότητα ή αδύναμη τοπική μεταβλητή για να παρακολουθείτε τους. Αυτές οι κατηγορίες περιλαμβάνουν NSTextView, NSFont και NSColorSpace, κλπ. Εάν πρέπει να χρησιμοποιήσετε ένα αδύναμο αναφορά σε μία από αυτές τις κατηγορίες, θα πρέπει να χρησιμοποιήσετε μια μη ασφαλή αναφοράς. Μια μη ασφαλή αναφοράς είναι παρόμοιο με ένα αδύναμο αναφορά στο ότι δεν τηρεί σχετικό αντικείμενο ζωντανός, αλλά δεν θα πρέπει να οριστεί σε μηδέν, αν το αντικείμενο προορισμού deallocated.
@property (unsafe_unretained) NSObject *unsafeProperty;