I came across this explanation on StackExchange on the performance penalties with ARC:<p>&gt;As for performance both have performance penalties. Automatic reference counting delivers a more consistent performance, no pauses, but slows down your application as a whole as every assignment of an object to a variable, every deallocation of an object, etc, will need an associated incrementation&#x2F;decrementation of the reference counter, and taking care of reassigning the weak references and calling each destructor of each object being deallocated. GC does not have the performance penalty of ARC when dealing with object references however it incurs pauses while it is collecting garbage (rendering unusable for real-time processing systems) and requires a large memory space in order for it to function effectively such that it is not forced to run, thus pausing execution, too often.<p>&gt;As you can see both have their own advantages and disadvantages, there is no clear cut ARC is better or GC is better, both are compromises.<p>&gt;PS: ARC also becomes problematic when objects are shared across multiple threads requiring atomic incrementation&#x2F;decrementation of the reference counter, which itself presents a whole new array of complexities and problems.