2010-05-24 10 views
0

Je cherche la syntaxe du getter/setter. Quel est le setter et quel est le getter ??@property objectif-c syntax

L'attribut readwrite est-il le getter?
Est-ce que l'assignateur est le setter?

 
@interface SomeClass : NSObject 
{ 
    NSString *str; 
    NSDate *date; 
} 

@property (readwrite, assign) NSString *str; 
@property (readwrite, assign) NSDate *date; 

Répondre

6

Le getter ou le setter ne sont pas non plus. readwrite détermine si une méthode set est générée ou juste un getter, et assign spécifie le schéma de gestion de la mémoire (dans ce cas, les variables ne sont pas conservées, ce qui est probablement une erreur).

Pour la syntaxe de déclaration de propriété complète, vous pouvez consulter the relevant docs.

+0

Cette documentation est très bonne, bien que je n'ai pas trouvé si je peux échanger les attributs comme: @property (copier, readwrite) Valeur NSString *; @property (lecture, copie) Valeur NSString *; – okami

+0

@okami: vous pouvez échanger l'ordre, mais il y a un ordre dans lequel ils sont classiquement écrits et qui s'écartent de ce qui peut être moins utile pour d'autres personnes qui scannent votre code. – corprew

+0

Lien cassé. :( – devios1

2

Vous devriez vérifier this page, il va expliquer les choses.

readwrite = la propriété peut être lu et écrit

assign = ceci est une propriété qui n'a pas besoin d'être compté ref. (L'alternative est « conserver », ce qui signifie que les valeurs de cette propriété sont retain ed lorsqu'il est réglé et release d lorsque écrasé

+0

le lien est cassé et "page" n'est pas une très bonne ancre, malheureusement. –

2

Ni le code affiché est une déclaration d'interface;.. Accesseurs vont dans un contexte @implementation, et sont généralement créés à l'aide de la directive @synthesize, comme dans

@synthesize str; 
@synthesize date; 

Il y a un certain nombre d'attributs qui peuvent aller après une déclaration de propriété. dans ce cas, le readwrite spécifie que peut être réglée la valeur de la propriété (en utilisant la syntaxe someObject.str = @"foo"), le contraire est readonly, ce qui signifie que la valeur de la propriété ne peut pas être défini. - assign - par opposition à copy ou retain - signifie que la valeur de la propriété est définie directement, tandis que les deux derniers créent une copie de la valeur et conservent la valeur, respectivement.

2

Le getter et le setter sont deux méthodes créées automatiquement lorsque vous utilisez @property. Par défaut, le getter aura le même nom que la propriété, le setter aura le préfixe set et le suffixe :; Par exemple, pour la propriété str, vous pouvez appeler le [someobj str] pour obtenir la propriété str et [someobj setStr: somestr].

Les attributs readwrite et assign fournissent des informations sur la façon dont ce getter et cet accesseur doivent être définis, si vous utilisez @synthesize pour créer les définitions pour vous. readwrite indique simplement que vous êtes autorisé à définir la propriété et assign indique comment la propriété sera définie. Voir the documentation pour plus d'informations.