Objective-c NSArray init versus initWithCapacity:0

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?

Answers


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.


Need Your Help

An sql query with join involved using Mysql

mysql sql

-- 12. (trouble) List all customers, title, artist, quantity ordered SELECT customer_name, title, artist, order_qty FROM customers,items,orderline, orders WHERE orders.order_id =

how to add a css style property dynamically in JSF

css jsf primefaces

I am using primeface for the UI components and I have to set the background of the layout unit temporary its done by using the css style,

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.