12

Sono un nuovo sviluppatore di cacao proveniente da uno sfondo C#/Java. Ero stato introdotto a schemi di gestione della memoria che il linguaggio dell'obiettivo-c utilizza e li trovo molto utili per lo sviluppo attento al codice.Objective-C ARC vs. MRR: perché lo switch?

Perché Apple ora vuole che noi usiamo ARC (Automatic Reference Counting), invece di MRR (Manuale Conservare-Release) e quali vantaggi diverso risparmio di tempo non offre ARC?

vedo una tale transizione influenzare negativamente buon cittadino abitudini che gli sviluppatori guadagnano dalla obj-c ecosistema.

Nick

+1

Grazie a @ pst per la modifica. Questo è stato il mio primo post e mi sono dimenticato di spiegare ulteriormente i nuovi acronimi. –

risposta

12

E 'un peccato che, per rendere più facile per gli sviluppatori competenti di essere corretto ha un effetto collaterale di rendere più facile per i nuovi sviluppatori di non imparare, ma sembra che è probabilmente vale la pena.

ARC è meno indulgente di un raccoglitore di traccia come C# o Java. Se non si dispone di un modello di proprietà di oggetti chiari, si creeranno quasi certamente cicli e perdite di memoria. La mia speranza sarebbe che ciò sia reso abbastanza ovvio (tramite strumenti ?, che richiede ancora di cercarlo ... non sono sicuro di cosa potrebbe essere fatto qui) che i nuovi sviluppatori impareranno rapidamente a mantenere il loro oggetto grafico chiaro e aciclico.

+3

Grazie a @Catfish_Man, preferirei che l'ARC sia più simile a un sistema di avviso del compilatore supportato dall'analizzatore statico. –

+0

@ NicholasE.Credli: È rigoroso di proposito: la maggior parte delle regole ARC sono basate sul principio che il compilatore deve essere corretto il 100% delle volte, quindi quando lo lanci un caso che è ambiguo, non indovinerà cosa tu significa, ma semplicemente lanciare un errore. La soluzione è semplicemente rendere il tuo codice univoco. –

9

ARC mi permette di concentrarmi sulla scrittura del codice utile, invece di metodi boilerplate dealloc.

La maggior parte delle persone che conosco hanno usato autorelease dietro ogni alloc in ogni caso, perché ti ha salvato un release tardi e non si poteva dimenticare di mettere in realtà. Quindi l'oggetto era intorno fino a quando il pool di autorelease non veniva drenato, e con ARC l'oggetto viene deallocato quando non è più necessario. Penso che in quei casi il programma compilato ARC userà anche meno memoria.

E, vergogna su di me, mi aiuta a far sì che anche le mie app si blocchino meno spesso.
Questa versione prematura che si verifica ogni 10.000 lanci. Quello che non potrei mai rintracciare completamente, si spera che con ARC questa sia una cosa del passato.


vedo una tale transizione influenzare negativamente le abitudini di buon cittadino che gli sviluppatori guadagnano dalla obj-c ecosistema.

probabilmente allo stesso modo uno sviluppatore incorporato che ha iniziato con l'Assembler pensa la gente che iniziano con C e non hanno mai usato assembler entrare in cattive abitudini.

A mio parere il MRR vs discussione ARC è simile.
ARC e C consentono entrambi di scrivere codice più gestibile in un tempo più breve. E entrambi possono portare a una memoria più grande e all'ingombro della CPU.
Se non ricordo male Apple ha annunciato che hanno fatto aggiungere un po 'di velocità fino a retain e release per compensare che hanno un impatto sulla CPU. E a causa di ciò non esiste un vero motivo per cui MMR sia ancora in circolazione.

Io, per esempio, benvenuto ai nostri nuovi padroni ARC.

2

realtà ho invece goduto di trasferirsi a ARC - è una cosa in meno a cui pensare.Inoltre, penso che i nuovi arrivati ​​sarebbero spesso inciampati dal significato delle convenzioni di denominazione (+ alloc, -copy ecc vs [NSString stringWith ....]). l'unico problema è quando si inizia a trattare con CoreFoundation etc (le API C) in cui si deve ancora tenere a mente chi è il proprietario di cosa.