7

Can you please explain me exact difference between these two lines?

NSArray *foo = [NSArray arrayWithObjects:@"hai",@"how",@"are",@"you",nil];
NSArray *bar = [[NSArray alloc] initWithObjects:@"hai",@"how",@"are",@"you",nil];

3 Answers 3

17

arrayWithObjects is "convenience constructor".

It will do:

return [[[NSArray alloc] initWithObjects:@"hai",@"how",@"are",@"you",nil] autorelease]

for you.

It is just a convenience method to get an autoreleased object while improving the readability of the statement. Keep in mind that the fact that the object is autoreleased is a simple convention of the language (not a rule, so you could do differently, but I would not suggest that).

Sign up to request clarification or add additional context in comments.

1 Comment

can you please change the ininWithObject as initWithObject. sorry to say that because some other persons do not get any error
8

arrayWithObject returns an autoreleased array so you do not have to worry about releasing it when you don't need it anymore (but if you store it in an instance variable, you should retain it to prevent the autorelease pool from freeing it). initWithObject returns an array with a retain count of 1, i.e. you own the array and you must release it at some point to prevent memory leaks.

You might want to read this guide for more clarification.

Comments

2

You own the second array but not the first.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.