Før diskutere om egenskapene til @property, bør du vite hva som er bruk av @property. @property tilbyr en måte å definere den informasjonen som en klasse er ment å kapsle. Hvis du definerer et objekt / variabel ved hjelp @property, så dette objektet / variable vil være tilgjengelig for andre klasser importerer sin klasse. Hvis du definerer et objekt ved hjelp @property i header-fil, så må du syntetisere den ved hjelp @synthesize i gjennomføringen filen.
Eksempel:
.h klasse
@interface ExampleClass : NSObject
@property (nonatomic, retain) NSString *name;
@end
.m klasse
@implementation ExampleClass
@synthesize name;
@end
Nå kompilatoren vil syntetisere tilbehør metoder for navn.
ExampleClass *newObject=[[ExampleClass alloc]init];
NSString *name1=[newObject name]; // get 'name'
[obj setName:@“Tiger”];
Liste over attributtene @property: atom. nonatomic. beholde. kopiere. skrivebeskyttet. Les Skriv. tildele. sterk.
atomic: Det er standard virkemåte. Dersom et objekt er deklarert som atomisk deretter blir det trådsikre. Tråd sikker måte, på et tidspunkt bare en tråd av en bestemt forekomst av klassen kan ha kontroll over det objekt.
eksempel:
@property NSString *name; //by default atomic
@property (atomic)NSString *name; // explicitly declared atomic
nonatomic: Det er ikke thread-safe. Du kan bruke nonatomic eiendom attributtet for å angi at syntetiserte accessors bare satt eller returnere en verdi direkte, uten garantier for hva som skjer hvis den samme verdien er tilgjengelig samtidig fra forskjellige tråder. Av denne grunn er det raskere å få tilgang til en nonatomic eiendom enn et atom en.
@property (nonatomic)NSString *name;
beholde: er nødvendig når attributtet er en peker til en object.The setter metode vil øke beholde telling av objektet, slik at det vil oppta minne i autoutgivelses bassenget.
@property (retain)NSString *name;
kopi: Hvis du bruker kopiere, kan du ikke bruke beholde. Bruke kopi forekomst av klassen vil inneholde sin egen kopi. Selv om en foranderlig strengen er satt, og deretter endret, forekomsten fanger uansett verdi den har på det tidspunktet den er satt. Det er ingen Setter og getter metoder vil bli syntetisert.
@property (copy) NSString *name;
NSMutableString *nameString = [NSMutableString stringWithString:@"Liza"];
xyzObj.name = nameString;
[nameString appendString:@"Pizza"];
skrivebeskyttet: Hvis du ikke ønsker å tillate eiendommen skal endres via setter metoden, kan du erklære eiendommen skrivebeskyttet.
@property (readonly) NSString *name;
Readwrite: er standard oppførsel. Du trenger ikke å spesifisere Readwrite attributt eksplisitt.
@property (readwrite) NSString *name;
tilordner: vil generere en sprøytestøper som tildeler verdien til forekomsten variable direkte, i stedet for å kopiere eller beholde den. Dette er best for primitive typer som NSInteger og CGFloat eller gjenstander du ikke direkte eier som delegater.
@property (assign) NSInteger year;
sterk: er en erstatning for beholder.
@property (nonatomic, strong) AVPlayer *player;
unsafe_unretained: Det er noen klasser i Cocoa og Cocoa Touch som ikke støtter svake referanser, som betyr at du ikke kan erklære en svak eiendom eller svak lokal variabel for å holde styr på dem. Disse klassene omfatter NSTextView, NSFont og NSColorSpace, osv. Hvis du trenger å bruke en svak referanse til en av disse klassene, må du bruke en usikker referanse. En usikker referansen er lik en svak referanse i at det ikke holder tilhørende objekt i live, men det vil ikke bli satt til null hvis målet objektet er deallocated.
@property (unsafe_unretained) NSObject *unsafeProperty;