If nil is meant to mark the end of parameters, then can I use:
[NSArray arrayWithObjects:obj1, obj2, nil, nil, nil];
as the first nil marks
The addition of nil to the end is not intended to add nils to an array, its simply an artifact of how C processes ... variable argument lists. It has nothing to do with NSArray or NSMutableArray, you cannot store nil in either.
So whether the compiler accepts, nil, nil, nil is actually irrelevant. The compiler will stop reading at the first nil. And writing that code in the first place shows a misunderstanding of obj C collections and var arg methods.
Why not use the new literal syntax and just say
NSArray *myArray = @[@"bla", @"bla", @"bla"];
Either way the extra nils matter not in the syntax you provided.