Can you please explain me exact difference between these two lines?
NSArray *foo = [NSArray arrayWithObjects:@\"hai\",@\"how\",@\"are\",@\"you\",nil];
NSArra
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).