2013-02-07 17 views
7

Sto modificando uno open source app che non è ARC. La maggior parte della mia esperienza iOS è con l'obiettivo-c abilitato ARC, quindi quando creo e aggiungo nuovi file al progetto tendo a renderli ARC compatibili con compiler flags (specialmente quando mi trovo di fronte a strani codici non arc bugs).quanto è sicuro mescolare il codice ARC e quello non ARC nello stesso progetto iOS?

La cosa che mi tiene sveglio la notte è la domanda: quanto è sicuro e affidabile mescolare arco e codice non arco nel mio progetto? Quando verrà il momento del QA, sarà un incubo testare cose come perdite di memoria, prestazioni ecc. Ecc.? Chiesto in un altro modo ... vale la pena convertire il codice non arc esistente in codice arco e sbarazzarsi del potenziale problema?

+0

Questi sono flag di compilazione, non flag di linker. Inoltre, l'utilizzo di ARC non ti assolve dal dover testare la tua app per perdite e prestazioni. –

+0

il mio male .. fisso .. – abbood

risposta

9

È possibile mescolare liberamente senza problemi.

+0

Sì, davvero questa è tutta la risposta di cui hai bisogno. C'è un avvertimento (qualcosa sul codice precompilato con scarse convenzioni sui nomi che ingannano ARC in modo eccessivo) ma che non penso si applichi in questa situazione. – borrrden

+0

err .. beh io rispetto moltissimo entrambi e riconosco entrambe le tue esperienze tecniche .. speravo in qualche prova o documentazione? o le tue risposte si basano semplicemente sull'esperienza personale (che potrebbe essere ancora abbastanza di per sé) – abbood

+1

@abbood - ARC non è magico, guarda semplicemente il tuo codice in fase di compilazione e aggiunge i necessari ritardi e release. Il codice generato non è diverso dal codice che avresti scritto tu stesso. Dalla [Transizione alle note di rilascio ARC] (https://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226): "Puoi anche scegliere di utilizzare ARC su una base per file se è più comodo utilizzare il conteggio dei riferimenti manuale per alcuni file." – sosborn

0

Io non credo che sia sicuro dal momento che un certo codice è vietato quando ARC è acceso come questo metodo:

- (void)dealloc 
{ 
    [super dealloc]; 
} 

E, naturalmente, quando rilasciando:

[exampleVariable release]; 

che possono essere presenti nei progetti non ARC.

+0

la mia domanda presuppone che tutto questo codice non sicuro sia già stato preso in considerazione (cioè estratto) – abbood

+1

Bene in tal caso, è completamente sicuro poiché è l'unica cosa che conta. –

+1

Il conteggio del codice non ARC non lo renderebbe essenzialmente codice ARC? – devios1