• 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: Graham Cox <email@hidden>
  • Date: Tue, 8 Sep 2009 01:51:15 +1000


On 08/09/2009, at 1:31 AM, Paulo F. Andrade wrote:

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.


Yes, but the return type will cause different compilation of objc_msgSend. There are several variants of that (obc_msgSend_fpret, objc_msgSend_stret, etc) depending on which registers are expected to return what sorts of values - structs vs. floats vs. integers/objects for example. So the right method will get called but within the wrong context of what will be returned. You can verify this yourself by disassembling some variants of calling a test method - if only the return type varies and the compiler can't disambiguate based on class of the receiver, it will compile the first version it finds.

What's probably occurring in your case is that the compiler has used a version (such as -(id) value) that returns its value in a certain register, whereas the -(float) value method returns it in a different register (an fp register, generally). It just so happens that the register that the caller pulls the result from holds the slider object.

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

Probably because -value is ambiguous and -maximumValue is not.

Trust me - this happens. It's bitten me once or twice and I won't let that happen again, as it's so hard to understand what's going on and debug it.

--Graham


_______________________________________________

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: "Paulo F. Andrade" <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>)
 >Re: Sending the "value" message to an object typed "id" (From: "Paulo F. Andrade" <email@hidden>)

  • Prev by Date: Re: Sending the "value" message to an object typed "id"
  • Next by Date: Re: Symbolic Links in Snow Leopard
  • 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