To answer question one:
Regarding question two, you most definitely can do better than ARC. Automated resource management in any language is always a heuristic approach that can never interpret the intentions of the programmer 100%. When you opt to control this process, you will almost always have fewer alloc/free calls for a given run of your program. This means more efficiency, (usually) less memory fragmentation, and sadly, the unfortunate task of having to worry about memory leaks.
Memory management (and pointers/aliasing) tend to be taught to people with the stigma of difficulty. This is an awful mistake. These concepts are actually quite simple and fundamental to how the machine you're operating works. Face them head on and early, and you'll be a force to reckon with.
That said, unless you have a specific reason to use MRC, ARC will save you debugging time and let you write safer code faster.