If you don't use ARC then memory leaks are easy to cause. If you alloc/init an object and then don't release it, or have more retains than releases, and then forget about it then the object is leaked.
ARC does not memory manage memory that is allocated using malloc/calloc. That's entirely up to you. If you malloc a block of memory, you have to free it when you'e done with it, or it gets leaked.
ARC also does not memory manage Core Foundation Objects, unless you make use of the correct bridging casts to hand control of those objects to Cocoa. So if you CFCreate a Core Foundation object and then don't CFRelease it, you've also just leaked memory.