2009-12-09 10 views
17

Nel libro, "Gli schemi di cacao di design", l'autore dichiara a volte una proprietà nella @interface in sola lettura:dichiarazioni accessor Objective-C (in sola lettura, readwrite, ecc)

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

e poi aggiunge un Senza nome categoria alla realizzazione (.m) file in questo modo:

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

Qualsiasi idea del perché? Non mi è chiaro come questo approccio sia migliore di, o più necessario di, inizialmente dichiarando la proprietà come "readwrite".

risposta

40

Esternamente, la proprietà sarà in sola lettura. All'interno della classe avrà sia l'accessor che il setter.

Il setter non sarà visibile dal compilatore al di fuori del file di implementazione (.m).

+0

Vedo. Ok grazie! Questo ha senso ora. – RyJ

+0

Nessun problema, felice è stato aiutato. –

+1

Cosa succede se tutto quanto sopra è lo stesso, ma MYShapeEditorDocument viene esteso a MYShapeEditorDocumentExtended. MYShapeEditorDocumentExtended ha ancora lo stesso accesso in lettura esternamente e readwrite internamente per la classe MYShapeEditorDocumentExtended? – jdog