Ho iniziato a imparare Objective-C alcune settimane fa e ancora non capisco come gestire correttamente l'incapsulamento di una classe. Qual è il modo migliore per dichiarare una variabile membro privata in una classe?Dichiarazione di variabili membro private
Sembra che l'impostazione del getter/setter corretto per la variabile membro con "@property" sia la giusta via da seguire, oltre alla semplice dichiarazione "@private" nell'interfaccia. Ma mi sembra che questo dia ancora ad altre classi un accesso a queste variabili. Anche se dichiari la proprietà "readonly", una classe esterna può accedere al riferimento alla variabile membro e modificarla!
Quindi sto indovinando il modo migliore per dichiarare una variabile membro privato è quello di non includere alcun guetter/setter non dichiarando una proprietà. Ho ragione? O c'è un modo migliore?
Grazie
Ok, quindi utilizzando una categoria posso nascondere totalmente una variabile membro. Ma non riesco ancora ad usare "readonly" per un membro visibile, poiché restituisce il riferimento all'oggetto. Si può semplicemente modificare il riferimento e scrivere su di esso, anche se non ha setter. –
Buon punto! Proverò a indagare su quale tipo di protezione obiettivo-c dare ad esso. La mia ipotesi è che non appena si tenta di cambiare il valore dell'oggetto referenziato si fa una copia e le modifiche non si propagano all'oggetto protetto. Ecco la documentazione: http://developer.apple.com/mac/library/documentation/cocoa/conceptual/objectivec/Articles/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW19 – vfn
@Oliver , ti dispiacerebbe creare un'altra domanda per questo, e mettere il tuo codice lì per darci una migliore comprensione di questo problema. "Selettore non riconosciuto" di BTW significa che non hai quel selettore specifico, che può essere una proprietà o un metodo. Sei sicuro di aver dichiarato la proprietà con privilegi di "readwrite"? – vfn