Qualcuno può spiegare a me in dettaglio quando devo usare ogni attributo: nonatomic
, copy
, strong
, weak
, e così via, per una proprietà dichiarata, e spiega cosa fanno ciascuno? Una sorta di esempio sarebbe anche grandioso. Sto usando ARC.Objective-C ha dichiarato attributi @property (nonatomic, copiare, forte, debole)
risposta
Questa risposta ha numerosi errori ed è anche obsoleta. Si prega di vedere altre domande/risposte e i commenti.
nonatomic
nonatomic
viene utilizzato per più scopi filettare. Se abbiamo impostato l'attributo nonatomico al momento della dichiarazione, qualsiasi altro thread che voglia accedere a quell'oggetto può accedervi e dare risultati rispetto al multi-threading.
Copia
copy
è richiesto quando l'oggetto è mutevole. Usalo se hai bisogno del valore dell'oggetto così com'è in questo momento, e non vuoi che quel valore rifletta le modifiche apportate da altri proprietari dell'oggetto. Avrai bisogno di rilasciare l'oggetto quando hai finito con esso perché stai mantenendo la copia.
Assegna
Assign
è un po 'l'opposto di copy
. Quando si chiama il getter di una proprietà assign
, restituisce un riferimento ai dati effettivi. In genere si utilizza questo attributo quando si dispone di una proprietà di tipo primitivo (float, int, BOOL ...)
Retain
retain
è richiesto quando l'attributo è un puntatore ad un oggetto. Il setter generato da @synthesize
manterrà (con l'aggiunta di un conteggio di ritenzione a) l'oggetto. Avrai bisogno di rilasciare l'oggetto quando hai finito con esso. Usando retain lo farà aumentare il conteggio dei ritardi e occuperà la memoria nel pool autorelease.
Strong
strong
è un sostituto per l'attributo trattenere, come parte di Objective-C Automated Reference Counting (ARC). Nel codice non ARC è solo un sinonimo di retain.
Questo è un buon sito web per conoscere strong
e weak
per iOS 5. http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1
Debole
weak
è simile a strong
salvo che non aumenterà il numero di riferimento di 1. Non diventa un proprietario di quell'oggetto, ma tiene semplicemente un riferimento ad esso. Se il numero di riferimento dell'oggetto scende a 0, anche se potresti ancora puntarlo qui, verrà deallocato dalla memoria.
Il collegamento precedente contiene sia Buone informazioni riguardanti Debole e Forte.
Grazie per la spiegazione, ho alcune domande però, 1. Ho la mia classe dati principale, in questa classe ho tutti gli attributi impostati su strong. Quindi, quando sto creando un'altra classe, ho un valore variabile di NSString che ottiene valore da una casella di testo, fare questo valore NSString dovrebbe di tipo debole? scusa per le domande noob che stanno ancora imparando ... –
se stai usando questo NSString solo internamente in quella classe stessa di quanto non hai nemmeno bisogno di una proprietà puoi semplicemente renderlo un iVar e se lo stai usando in un'altra classe di quanto non lo farò io consiglia (forte, copia). –
Manca la proprietà Assegna. – mskw
Questo legame ha la rottura
http://clang.llvm.org/docs/AutomaticReferenceCounting.html#ownership.spelling.property
assegnare implica proprietà __unsafe_unretained.
la copia implica __di proprietà estesa, nonché il comportamento normale della copia semantica sul setter.
conservazione implica __di proprietà estesa.
forte implica __di proprietà estesa.
unsafe_unretained implica __unsafe_unretained ownership.
debole implica __Bassa proprietà.
non è la proprietà Assign utilizzata solo per iVar e valori? Quindi perché è pericoloso e perché è necessario notare che non è riservato? – mskw
nonatomic
proprietà afferma che l'oggetto non è thread-safe che significa che se un thread diverso tenta di accedere a questo oggetto di cose brutte possono accadere, ma questo è molto più veloce di proprietà atomica.
strong
viene utilizzato con ARC e in pratica aiuta a non doversi preoccupare del numero di ritenzione di un oggetto. ARC lo rilascia automaticamente quando hai finito. Utilizzare la parola chiave strong
significa che sei il proprietario dell'oggetto.
weak
proprietà significa che non lo possiedi e tiene semplicemente traccia dell'oggetto fino a quando l'oggetto a cui è stato assegnato rimane, non appena il secondo oggetto viene rilasciato perde valore. Per es. Viene utilizzato obj.a=objectB;
e una proprietà ha debole, che il suo valore sarà valido solo finché l'oggetto B rimane in memoria.
copy
proprietà è molto ben explained here
strong,weak,retain,copy,assign
si escludono a vicenda in modo non è possibile utilizzare su un unico oggetto ... leggere il "Declared Properties " sezione
sperando che questo ti aiuta un po '...
perché forte, debole, conserva, copia, assegna escluso –
'nonatomico' significa solo che non viene applicata alcuna esclusione. Ciò non significa che l'accesso non è thread-safe. Questo è un dettaglio di implementazione che 'atomic' vs.' nonatomic' non cattura. – bbum
@bbum Puoi spiegare la differenza tra nessuna esclusione e non thread-safe ..? –
Grandi risposte! Una cosa che vorrei chiarire più a fondo è nonatomic
/atomic
. L'utente deve comprendere che questa proprietà - "atomicità" si diffonde solo sul riferimento dell'attributo e non sul suo contenuto. I.e. atomic
garantirà all'utente l'atomicità per la lettura/impostazione del puntatore e solo il puntatore all'attributo. Ad esempio:
@interface MyClass: NSObject
@property (atomic, strong) NSDictionary *dict;
...
In questo caso è garantito che il puntatore alla dict
verrà letto/impostato nel modo atomico da diversi thread. MA il dict
stesso (il dizionario dict
che punta a) è ancora thread non sicuro, cioè tutte le operazioni di lettura/aggiunta al dizionario sono ancora thread non sicure.
Se è necessaria la raccolta sicura dei thread, si ha una cattiva architettura (più spesso) o un requisito reale (più raro). Se è un "requisito reale", dovresti trovare un buon componente di raccolta sicuro per il thread, & OPPURE essere preparato per prove e tribolazioni scrivendo il tuo. In quest'ultimo caso guardate i paradigmi "lock-free", "wait-free". Sembra una scienza missilistica a prima vista, ma potrebbe aiutarti a ottenere prestazioni fantastiche rispetto al "solito blocco".
- 1. Chiarificazione su assegnare, conservare, copiare, forte?
- 2. debole o forte per IBOutlet e altri
- 3. Confusione forte e debole in iOS
- 4. L'IBOutlet dovrebbe essere debole o forte?
- 5. Qual è l'uso dell'istruzione @property (nonatomic, retain) nell'applicazione?
- 6. iniezione Property di attributi
- 7. Come identificare una relazione forte vs debole su ERD?
- 8. @property definizioni con ARC: è il default forte adesso?
- 9. Interruzione del ciclo di mantenimento con auto forte/debole
- 10. Motivo per la dichiarazione di una proprietà come (forte, forte)
- 11. @property (readwrite, nonatomic, assign, getter = isCancelled) BOOL annullato - xcode6 causa errore del compilatore
- 12. forte @property con __attribute __ ((NSObject)) per un tipo CF non trattiene
- 13. Forte vs Mantieni in ARC
- 14. Come non copiare alcuni attributi?
- 15. Perché l'attributo della proprietà delegato di UITableView è debole
- 16. ARC forte proprietà di enumerazione errore
- 17. Esiste una convenzione accettata per l'ordine degli attributi della dichiarazione @property?
- 18. connectedAndroidTest - L'attività non ha dichiarato alcuna uscita
- 19. ObjectiveC blocca l'equivalente Java
- 20. Parametro del template C++ e specializzazione parziale: tipizzazione forte o debole?
- 21. Oggetto debole in un NSDictionary?
- 22. L'attributo non è dichiarato (Android) sugli attributi xml di base
- 23. Confondere esempio di forte ciclo di riferimento a Swift
- 24. immobili debole delegato non può essere formata
- 25. Cosa fa .property()? in function() {}. property()
- 26. Spiegazione di autoassegnazione debole usando __typeof
- 27. Rhino Mocks - Verificare Property Set quando Nr ha Get
- 28. La copia di @property in combinazione con readonly ha senso?
- 29. (Debole) ETags e Last-Modified
- 30. Assegnazione di un oggetto mantenuto a una proprietà debole; oggetto verrà rilasciato dopo l'assegnazione
Ecco la risposta http://stackoverflow.com/a/32942413/1961064 –
http://rypress.com/tutorials/objective-c/properties questo spiega tutto –