2009-12-09 12 views
17

Dans le livre, "Design Patterns Cocoa," l'auteur déclare parfois une propriété dans la @interface en lecture seule:déclarations accesseurs Objective-C (lecture seule, readwrite, etc.)

// .h 
@property (readonly, copy) NSArray *shapesInOrderBackToFront; 

puis ajoute plus tard une catégorie sans nom à la mise en œuvre (.m) fichier comme ceci:

// .m 
@interface MYShapeEditorDocument() 
@property (readwrite, copy) NSArray *shapesInOrderBackToFront; 
@end 

Toute idée de savoir pourquoi? Il n'est pas clair pour moi comment cette approche est meilleure, ou plus nécessaire que, en déclarant initialement la propriété comme "readwrite".

Répondre

40

Extérieurement la propriété sera en lecture seule. À l'intérieur de la classe, il aura à la fois l'accesseur et le setter.

Le setter ne sera pas visible par le compilateur en dehors du fichier d'implémentation (.m).

+0

Je vois. OK merci! Cela a du sens maintenant. – RyJ

+0

Pas de problème, content que ça aide. –

+1

Et si tout ce qui précède est le même, mais MYShapeEditorDocument est étendu à MYShapeEditorDocumentExtended. Est-ce que MYShapeEditorDocumentExtended a encore le même accès en lecture en externe et readwrite en interne pour la classe MYShapeEditorDocumentExtended? – jdog