the only reason I can think of to choose one method over the other is for performance reason... and only in an extreme case.
example case, adding a million objects to NSMutableArray
with [[NSMutableArray alloc] init], it'll have to realloc a million times, each time an object is added.
with [[NSMutableArray alloc] initWithCapacity:1000000], the array will be allocated with enough memory for a million objects at the get-go, so you don't incur the added overhead that the first method has.
so if you know how many items you want to put into the array beforehand, go for an initial capacity.
if you don't, then go for the default alloc+init.
here's a nice article that may give more insight:
http://cocoawithlove.com/2008/08/nsarray-or-nsset-nsdictionary-or.html