No, they will not behave identically. init
will create an array with some unknown but most likely nonzero capacity—whatever the authors decided was a reasonable default for most situations. initWithCapacity:0
will request an array with absolutely no allocated space. What this means is up to the NSMutableArray
implementation: it might not allow a capacity of 0 and behave exactly as init
, or it might not immediately allocate anything and instead allocate some amount (the same as init
, possibly, or maybe not) when you first need it.
Which will perform "better" completely depends on how you expect to use the array. -init
says "I have no expectations for this array; I'll either be adding to and removing from it a lot, or it will likely be pretty small." -initWithCapacity:
says "I expect this array to have no more than this many elements for the foreseeable future."
About the only place where I would expect initWithCapacity:0
to be reasonable is if you are creating an array that you don't expect to fill with anything for a fairly long period of time.
Note that the standard performance caveat applies here: it's probably not an issue unless you profile and determine that it is. I can't really imagine a situation (except for thousands upon thousands of NSMutableArray
objects) where the difference between these two will be substantial.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…