• 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: Sending the "value" message to an object typed "id"
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Sending the "value" message to an object typed "id"


  • Subject: Re: Sending the "value" message to an object typed "id"
  • From: "Paulo F. Andrade" <email@hidden>
  • Date: Mon, 7 Sep 2009 16:31:19 +0100




On 2009/09/07, at 13:11, Graham Cox wrote:


On 07/09/2009, at 9:36 PM, Paulo F. Andrade wrote:

So what's the deal with the method name "value" and ObjC runtime?


As an iPhone question this may be incorrect, but normally you use - floatValue to get a, umm, float value.

UISlider does not have a - floatValue method.


I suspect what's occurring is that -value is defined in multiple classes having different return types: maybe float in one case and id in another, say. The compiler can't disambiguate a method based on return type alone so compiles based solely on the first one it encounters, which to all intents and purposes may as well be random. It's a dirty little secret of Obj-C (or at least the current compilers) and is a very real source of bugs (and sometimes quite dangerous ones at that).

I don't get this. Won't the call

[sender value]

be dealt by objc_msgSend? Will it not traverse the isa pointer to get the method table and find the method named "value" and call that? At least from the UISlider class hierarchy there seems to be only one method named "value", no ambiguity there.


To avoid it, where possible do not use type id and always use explicit types if you can. If you know your sender is a UISlider*, then cast to that when messaging it with method names that can be ambiguous. Short and vague method names like -value are fairly likely to be ambiguous.

I know this. I just want to fully understand why this is happening for this particular name "value" and not for "maximumValue".



--Graham



Paulo F. Andrade

_______________________________________________

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


  • Follow-Ups:
    • Re: Sending the "value" message to an object typed "id"
      • From: Graham Cox <email@hidden>
    • Re: Sending the "value" message to an object typed "id"
      • From: Graham Cox <email@hidden>
References: 
 >Sending the "value" message to an object typed "id" (From: "Paulo F. Andrade" <email@hidden>)
 >Re: Sending the "value" message to an object typed "id" (From: Graham Cox <email@hidden>)

  • Prev by Date: Making an NSAlert be displayed when the User attempts to delete a row from an NSOutlineView when it has children.
  • Next by Date: Re: Sending the "value" message to an object typed "id"
  • Previous by thread: Re: Sending the "value" message to an object typed "id"
  • Next by thread: Re: Sending the "value" message to an object typed "id"
  • Index(es):
    • Date
    • Thread