Sommario:
Video: dom-1 2025
È possibile impostare determinati attributi di proprietà quando si dichiara una proprietà per la tua app iOS. Dai un'occhiata per scoprire maggiori dettagli sugli attributi che puoi impostare durante la programmazione.
Setter semantica / proprietà
Queste proprietà specificano come deve essere gestita la memoria della variabile di istanza:
-
forte (simile a retain, che era usato prima di ARC) crea un metodo accessor che significa che l'oggetto questa proprietà punta a verrà mantenuto mentre è in ambito (o finché non è impostato su zero). Questo è il valore predefinito.
-
debole (simile all'assegnazione, che è stato utilizzato in precedenza per ARC) crea una funzione di accesso che utilizza un'assegnazione semplice. In genere si utilizza questo attributo per tipi scalari come NSInteger e CGRect o (in un ambiente conteggiato di riferimento) per oggetti non di proprietà dell'utente, ad esempio delegati, e per evitare problemi di ciclo di mantenimento.
-
copia specifica che una copia dell'oggetto deve essere utilizzata per l'assegnazione. Il valore precedente viene inviato un messaggio di rilascio.
La copia viene effettuata richiamando il metodo di copia. Questo attributo è valido solo per i tipi di oggetto, che devono implementare il protocollo NSCopying.
Per le proprietà dell'oggetto, è necessario specificare esplicitamente uno dei tipi elencati in precedenza; altrimenti, si ottiene un avviso del compilatore. Quindi è necessario pensare a quale comportamento di gestione della memoria si desidera e digitare il comportamento in modo esplicito.
Scrivibilità
I seguenti attributi specificano se una proprietà ha un accessorio di set associato. Si escludono a vicenda.
-
readwrite indica che la proprietà deve essere considerata come lettura / scrittura. Questo attributo è il valore predefinito. I metodi getter e setter sono sintetizzati automaticamente.
-
readonly indica che la proprietà è di sola lettura. Viene sintetizzato solo un metodo getter. Se si implementano i propri accessor, è richiesto solo un metodo getter. Se si tenta di assegnare un valore usando la sintassi del punto, si ottiene un errore del compilatore.
Nomi dei metodi di accesso
Ricorderai che i nomi predefiniti per i metodi getter e setter associati a una proprietà sono rispettivamente PropertyName e setPropertyName:. Ad esempio, per il viaggio in proprietà, gli accessor sono trip e setTrip:. È tuttavia possibile specificare nomi personalizzati. Sono entrambi opzionali e possono apparire con qualsiasi altro attributo (ad eccezione di readonly e nel caso di setter =):
-
getter = getterName specifica il nome dell'accesso get per la proprietà. Il getter deve restituire un tipo corrispondente al tipo di proprietà e non richiedere parametri.
-
setter = setterName specifica il nome del set accessor per la proprietà. Il metodo setter deve prendere un singolo parametro di un tipo che corrisponde al tipo di proprietà e deve restituire void.
In genere, è necessario specificare i nomi dei metodi di accesso che sono conformi alla codifica dei valori-chiave. Un motivo comune per l'utilizzo del getter decorator è di rispettare la convenzione isPropertyName per i valori booleani.
Se si dispone di una proprietà booleana denominata in ordine alfabetico che si utilizza per tenere traccia di come viene ordinata una matrice di nomi, il getter predefinito verrà alfabetizzato. Usando la convenzione di denominazione, si creerebbe un metodo di accesso chiamato isAlphabetized, che è un po 'più chiaro.
Atomicità
È possibile utilizzare questo attributo per specificare che i metodi di accesso non sono atomici. (Nessuna parola chiave indica atomico.) Questo ha a che fare con problemi di concorrenza. Se si specifica nonatomico, un accessorio di sintesi per una proprietà dell'oggetto restituisce semplicemente il valore direttamente. Altrimenti, un access get get sintetizzato per una proprietà dell'oggetto utilizza un lock e conserva e autorizza il valore restituito.
