Do
[[NSMutableArray alloc] init];
and
[[NSMutableArray alloc] initWithCapacity:0];
compile into the exact same thing?
If they differ, then how, and which form is “better” in terms of memory and runtime performance?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
No, they will not behave identically.
initwill create an array with some unknown but most likely nonzero capacity—whatever the authors decided was a reasonable default for most situations.initWithCapacity:0will request an array with absolutely no allocated space. What this means is up to theNSMutableArrayimplementation: it might not allow a capacity of 0 and behave exactly asinit, or it might not immediately allocate anything and instead allocate some amount (the same asinit, possibly, or maybe not) when you first need it.Which will perform “better” completely depends on how you expect to use the array.
-initsays “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:0to 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
NSMutableArrayobjects) where the difference between these two will be substantial.