2009-12-09 7 views
17

In dem Buch "Design Patterns Cocoa", der Autor erklärt, manchmal eine Eigenschaft im @interface als Nur-Lese-:Objective-C-Accessor Erklärungen (nur lesbar, Lese-Schreib-etc)

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

und fügt dann später eine ungenannt Kategorie zur Umsetzung (.m), wie diese Datei:

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

Jede Idee, warum? Mir ist nicht klar, wie dieser Ansatz besser ist als die anfängliche Deklaration der Eigenschaft als "readwrite".

Antwort

40

Äußerlich wird die Eigenschaft nur gelesen. Innerhalb der Klasse hat es sowohl den Accessor als auch den Setter.

Der Setter ist für den Compiler außerhalb der Implementierungsdatei (.m) nicht sichtbar.

+0

Ich sehe. OK danke! Das macht jetzt Sinn. – RyJ

+0

Kein Problem, froh, dass es geholfen hat. –

+1

Was ist, wenn alles oben gleich ist, aber MYShapeEditorDocument wird zu MYShapeEditorDocumentExtended erweitert. Hat MYShapeEditorDocumentExtended immer noch denselben Lesezugriff extern und intern für die MYShapeEditorDocumentExtended Klasse readwrite? – jdog

Verwandte Themen