• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: [Obj-C Compiler Bug?] Two different classes declaring a message with the same name - compiler warning
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Obj-C Compiler Bug?] Two different classes declaring a message with the same name - compiler warning


  • Subject: Re: [Obj-C Compiler Bug?] Two different classes declaring a message with the same name - compiler warning
  • From: Roland King <email@hidden>
  • Date: Tue, 14 Oct 2008 17:47:26 +0800

Oleg Krupnov wrote:

You are right, casting from alloc worked, thank you.

Is it the recommended practice to always cast after alloc?



Not really - the recommended practice is to have method names which have unique parameter types. Remember that Objective-C's notion of a selector is foo:bar:baz:, it doesn't encode what the types of the parameters are (or the return type). So if you make every foo:bar:baz: have the same parameter types even though the compiler isn't going to enforce that for you, life gets simpler. If you have something which is very generic, like setDelegate: then you could make the parameter an id and test it in the code.

I have found myself more and more doing methods like this

-(void) methodWithSomeClass:(SomeClass*)someClassArg anotherClass:(AnotherClass*)anotherClassArg aSimilarClass:(ASimilarClass*)aSimilarClassArg;

and using the class names in the selector. It's verbose but .. objective-C seems to be verbose (I wish I could get XCode to fill in a template for the stuff I defined in the .h file when I go to define it in the .m file though)

I still have a question in this regard.

If the alloc returns id, then, from the compiler's perspective, there
can be two solutions: 1) assume that the id type can have each and any
method and let it be resolved at run time without any compiler warning
or 2) assume that the id does not have any methods (except NSObject's)
and always issue a compiler warning when there is no explicit casting
to a type. What compiler seems to be doing is rather strange: it looks
through the project, arbitrarily picks up a class with the matching
message name and issues a warning if the rest of the actual message
signature is not matching. How would you explain that?


Well I'd expect the compiler remembers the methods available for each class, cached under the selector name (remember no argument types in the selector name). So if you have two identically named selectors in two different classes but you call them ON instances of that class, all is fine. For id, the most generic class, I'd expect it caches the first one it finds with that selector name, then if you use it with different parameters, it warns you then. It could warn you at the point you declare the selector with different arguments, but that would be unecessary, because provided you used it on class instances, not ids, there's no ambiguity. So warning you at the point you use it on an id makes most sense.
_______________________________________________


Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


References: 
 >[Obj-C Compiler Bug?] Two different classes declaring a message with the same name - compiler warning (From: "Oleg Krupnov" <email@hidden>)
 >Re: [Obj-C Compiler Bug?] Two different classes declaring a message with the same name - compiler warning (From: "Chris Suter" <email@hidden>)
 >Re: [Obj-C Compiler Bug?] Two different classes declaring a message with the same name - compiler warning (From: "Oleg Krupnov" <email@hidden>)

  • Prev by Date: Re: [Obj-C Compiler Bug?] Two different classes declaring a message with the same name - compiler warning
  • Next by Date: Re: [Obj-C Compiler Bug?] Two different classes declaring a message with the same name - compiler warning
  • Previous by thread: Re: [Obj-C Compiler Bug?] Two different classes declaring a message with the same name - compiler warning
  • Next by thread: Re: [Obj-C Compiler Bug?] Two different classes declaring a message with the same name - compiler warning
  • Index(es):
    • Date
    • Thread