On Jun 9, 2008, at 5:55 PM, Hamish Allan wrote:

Sure. But it gives you *more* information than if it just returns
"id". I agree with you in all other respects of your post, but I don't
agree that +[NSArray array] returns "id" because if it returned
"NSArray *" you'd have to have a separate declaration for
+[NSMutableArray array]. Indeed, that line of reasoning leads to
John's way of thinking: that if you return something more specific
than "id", it is in some sense indicative that the returned object is
more likely to be of a specific class, rather than a subclass thereof.

I think the problem is that if NSArray has +[NSArray array] returning an NSArray, then NSMutableArray has to return an NSArray also, since it can't have a different method signature for the same method. As a result, if you called +[NSMutableArray array], the compiler would think you were getting a regular, non-mutable NSArray, and you'd get a warning if you tried to do this, although the code would still work:

NSMutableArray *array = [NSMutableArray array];

The only way to get the compiler warnings to shut up would be to cast it. If the methods return id, then the compiler just assumes you're doing the right thing (which also means you can do stupid things like assign +[NSMutableArray array] to an NSString or something which would of course end up blowing up before too long, so it's not perfect either, but it's certainly less annoying than having to typecast every assignment of a newly-initialized NSMutableArray).

Charles
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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]

Reply via email to