Se si utilizza ARC e un runtime recente (abbastanza recente da consentire di dichiarare i propri ivars nel proprio blocco @implementation), le variabili di istanza sono improvvisamente di nuovo impressionanti. Perché? Perché a differenza di @properties sono specifici della classe. Nessun rischio verranno accidentalmente sovrascritti da una sottoclasse.
Sono anche più veloci nel caso semplice, dal momento che non si chiamano metodi per ottenerli o impostarli.
Personalmente trovo anche molto più pulito. Non ci sono più estensioni di classe che definiscono private @properties e tutta quella spazzatura. Solo ivar, bello e semplice.
Quindi il miglior consiglio, IMHO, è di usarli per impostazione predefinita. Utilizza @properties solo se hai effettivamente bisogno della loro funzionalità, ad esempio
- Hai bisogno di un modo per accedervi dall'esterno della classe.
- Si desidera consentire alle sottoclassi di sovrascriverle.
- Il getter o setter è più di un compito banale.
Questi ultimi due sono tutti in realtà più rari di quanto si possa pensare. In genere non è saggio provare a sovrascrivere le proprietà nelle sottoclassi, solo perché è un po 'insolito e ci sono alcuni spigoli.
Se in seguito si scopre che è necessario aggiornare un ivar a @property, è semplice e intuitivo: l'unico posto a cui è possibile accedere si trova nella tua @implementation, quindi in genere è semplice ricerca-e- sostituire per aggiungere "self". ai suoi riferimenti (e forse rimuovi il trattino basso principale, se li chiami in quel modo). Fino a quel momento non è necessario pagare i costi e correre il rischio di usare @properties.
fonte
2012-12-24 02:12:45