Sapresti un modo per rendere una proprietà in sola lettura per chiamate esterne e readwrite per chiamate interne?Objective-C: (proprietà private/public) creazione di una proprietà in sola lettura per chiamate di classe esterne e readwrite per chiamate automatiche
ho letto tempo fa quacosa che sembrava
Nel .h
@property(nonatomic, readonly) NSDate* theDate;
Nel .m
@interface TheClassName()
@property(nonatomic, retain) NSDate* theDate;
@end
ma questo solleva un avvertimento quando si compila il .m "L'attributo della proprietà theDate nella continuazione della classe TheClassName non corrisponde alla proprietà class TheClassName".
In ogni caso, sembra funzionare (può leggere ma non impostato da fuori classe, può fare entrambi dall'interno) ma avrei dovuto perdere qualche tentativo di evitare l'avviso. Oppure se si conosce un modo migliore per farlo ...
+1, potrebbe anche voler eliminare il 'readwrite' in quanto è il default e' nonatomic' finché non è veramente necessario? – zoul
Il 'readwrite' rende esplicito che tu sai esattamente quello che vuoi. Alcune persone stanno portando avanti il mantra "usa sempre' nonatomico' "da iOS a Cocoa (lo faccio certamente); potrebbe essere una politica estesa al progetto. – bbum
Inoltre; il motivo per cui 'retain' deve essere menzionato in entrambi i casi è che i codegen per' @ synthesis' del getter di 'retain' vs.' assign' possono essere diversi in certi casi. Pertanto, la politica di 'retain' nella vista di sola lettura della proprietà * è * una parte dell'API/contratto della classe. – bbum