Per rispondere alla prima domanda:
Riguardo alla seconda domanda, puoi sicuramente fare meglio di ARC. La gestione automatizzata delle risorse in qualsiasi lingua è sempre un approccio euristico che non può mai interpretare le intenzioni del programmatore al 100%. Quando si sceglie di controllare questo processo, si avrà quasi sempre meno chiamate alloc / gratuite per una determinata esecuzione del programma. Ciò significa più efficienza, (solitamente) meno frammentazione della memoria e, purtroppo, lo sfortunato compito di doversi preoccupare delle perdite di memoria.
La gestione della memoria (e i puntatori / aliasing) tendono ad essere insegnati alle persone con lo stigma della difficoltà. Questo è un errore orribile. Questi concetti sono in realtà abbastanza semplici e fondamentali su come funziona la macchina che stai operando. Affronta loro in anticipo e presto, e sarai una forza con cui fare i conti.
Detto questo, a meno che tu non abbia una ragione specifica per usare MRC, ARC ti farà risparmiare tempo per il debug e ti consentirà di scrivere codice più sicuro più velocemente.