On Sat, Oct 11, 2008 at 1:57 PM, Seth Willits <[EMAIL PROTECTED]> wrote: > If it's what I think you're talking about then: No, nil is used as a marker > for the variable argument list to say "this is the end of the list." It's > not actually inserted into the dictionary at all. Why it's required is > really beyond me, but it's simply an Obj-C syntax thing.
It actually has to do with how C variable argument functions work. They're called "varargs" for short, and "man stdarg" has more information on how they work and how you can write one of your very own. The quickie version is that almost no information on the arguments gets passed into the receiver. A vararg function (or method) is allowed to do precisely three operations: - Start reading from the vararg list. - Read the next argument, treating it as a given type. - Stop reading from the vararg list. Note that nowhere in there is there anything related to how many arguments there are, or what type they are. This means that this information must be embedded in some other way. The printf family of functions (including NSString's format methods) do this by embedding the number and type of arguments in the format string, which is then parsed to extract them from the vararg list correctly. The collection building methods use nil to signal the end because it's the only way they can. (Technically, they could require a count argument instead, but I think we can all agree that this would be even *worse* in terms of how often we'd screw it up.) Mike _______________________________________________ Cocoa-dev mailing list ([email protected]) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [EMAIL PROTECTED]
