80

Utilizzando Xcode 4.2 e ARC, ho notato che il codice generato automaticamente per un NSManagedObject si legge ancora come questo per le proprietà:@property definizioni con ARC: strong o retain?

@property (nonatomic, retain) NSString * someString; 

1) Nel caso non retain ora essere sostituirli con strong o weak?

2) Perché il codice generato automaticamente usano ancora retain

3) Qual è la sostituzione corretta per retain in questa informativa immobile?

Attualmente sto eseguendo il debug di un problema utilizzando NSFetchRequest e ho pensato che questa potrebbe essere la fonte del problema. Pensieri?

+0

Si dovrebbe accettare la risposta ormai. – Rivera

risposta

40

Per rispondere a tutte e tre le domande in uno: retain e strong sono sinonimi, quindi entrambi sono corretti. The documentation stati

retain implica __strong proprietà

strong implica __strong proprietà

+0

Grazie per la risposta. Ho letto il documento Apple su ARC. Capisco che il mantenimento si traduca in forte. Tuttavia, questo non spiega perché il codice che viene generato automaticamente da Xcode quando si creano nuovi NSManagedObject (s) ti darà @property (nonatomic, retain) – one09jason

+3

A meno che non manchi qualcosa qui, questo lo spiega perfettamente. Il codice creato da Xcode è corretto in quanto mantiene funziona altrettanto forte, quindi dov'è la tua domanda? – Phlibbo

+6

Se si esegue il refactoring ARC sul progetto, convertirà tutti i '' '' '' '' '' '' '' '' Quindi la mia impressione è che 'strong' è l'attributo preferito, ma il generatore NSManagedObject non è stato aggiornato. Ma questa è solo una supposizione; forse nessuno di Apple ritiene importante la distinzione. – theory

110

1) Nel caso venga conservata ora essere sostituirli con forte o debole?

No. Non è possibile sostituire mantenere con debole; sono diversi. E forte è un sinonimo del 100% per mantenere; sono identici. Puoi usare entrambi, quindi non c'è "dovrebbe" qui. Puoi sostituire conservare con forza se vuoi, ma non devi.

2) Perché il codice generato automaticamente usano ancora mantenere

Perché non

? Vedi (1). mantenere è corretto quindi non c'è nessun problema.

3) Qual è la sostituzione corretta per conservare in questa dichiarazione di proprietà?

Non è necessario sostituire il mantenimento.

Attualmente sto eseguendo il debug di un problema utilizzando NSFetchRequest e ho pensato che questa potesse essere la fonte del problema. Pensieri?

Non lo è.

+9

Mi piacerebbe, però, che una comunità ossessionata (e giustamente!) Con gli standard e la conformità a Apple Way (s), vedere mantenere in solo modelli sintetizzati è scadente. Io cambio a forte solo per essere pedante. Per esempio, rende acchiabile un grande progetto di sintassi impropria un po 'più semplice, tra una mezza dozzina di altre piccole cose. –

+12

Non sai esattamente quale sia l'architettura emotiva. Puoi fornire un esempio nella "luce fredda e chiara del giorno?" ;-) false e NO sono sinonimi, ma usiamo NO per convenzione in Objective-C. Ci sono ragioni per essere coerenti; essere incoerenti va bene, ma l'onere di dimostrare dignità è l'unica convenzione irridente, non quella che aderisce ad essa. –

+9

Con tutto il dovuto rispetto, @EricGoldberg ha un punto: la convenzione è importante. E poiché tu sarai '__strong' in altri punti del tuo codice (non c'è' __retain') potresti voler passare a usare 'strong' per coerenza. Questo è simile all'indentazione del codice in modo coerente, anche se il codice funzionerà correttamente senza questo. –

4

Prima di ARC, è necessario "rilasciare" un oggetto che viene mantenuto. Quel mantenimento medio ha una controparte. Dopo ARC non è necessario rilasciare. Quindi usa forte. È un indizio visivo del fatto che non è necessario chiamare il rilascio.

3

"retain" è uguale a "strong".

"forte" viene utilizzato ad esempio:

@property (nonatomic, strong) NSString * someString; 

E "__strong" viene utilizzato ad esempio:

-(void) someMethod 
{ 
    __strong NSString* vStr = [[NSString alloc] initWithString:@"some string"]; 
} 

Sulla Mela Documenti. dice: Attributi

Proprietà

Le parole chiave deboli e forti vengono introdotti come nuovi attributi di proprietà dichiarati, come mostrato negli esempi che seguono.

// The following declaration is a synonym for: @property(retain) MyClass *myObject; 
property(strong) MyClass *myObject; 

Apple doc. http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

Problemi correlati