• 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: method caller mixup
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: method caller mixup


  • Subject: Re: method caller mixup
  • From: "Paul Sanders" <email@hidden>
  • Date: Sat, 17 Apr 2010 20:42:56 +0100

> It's not particularly tricky. +alloc returns an id, and Objective-C doesn't have operand-overloaded methods.
> There is nothing in your alloc/init expression that tells the _compiler_ which of the differently-defined initWithParent:
> methods you intend to use, so it picks one in some undefined way. In this case, it picked the one you didn't intend.
>
> You can force the choice by casting the result of +alloc to the intended type:
>
> [ (HSMM_TrieNode *)[HSMM_TrieNode alloc] initWithParent: aNode ]

-Wstrict-selector-match would have reported the ambiguity.  Otherwise, the following code compiles without complaint (this is on gcc 4.0; on gcc 4.2 the warning flag might be on by default):

    @interface Class1 : NSObject
    - (id) initWithScalar: (int) i;
    @end

    @interface Class2 : NSObject
    - (id) initWithScalar: (float) f;
    @end

    void test (void)
    {
        Class1 *o1 = [[Class1 alloc] initWithScalar: 1];
        Class1 *o2 = [[Class1 alloc] initWithScalar: 1.0f];
        Class2 *o3 = [[Class2 alloc] initWithScalar: 1];
        Class2 *o4 = [[Class2 alloc] initWithScalar: 1.0f];
    }

However, two of these four init method invocations will get a parameter in a form (int vs float) they don't expect since the compiler doesn't have enough information to perform the expected implicit type conversion across the call, and that is not good.

As for the scope and interpretation of method names, this might be worth a look if you haven't already:

http://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocSelectors.html#//apple_ref/doc/uid/TP30001163-CH23-SW1

Paul Sanders.
_______________________________________________

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: method caller mixup
      • From: James Maxwell <email@hidden>
References: 
 >method caller mixup (From: James Maxwell <email@hidden>)
 >Re: method caller mixup (From: Fritz Anderson <email@hidden>)

  • Prev by Date: Parsing common elements between xml documents
  • Next by Date: Re: How to find all clipping siblings for a view?
  • Previous by thread: Re: method caller mixup
  • Next by thread: Re: method caller mixup
  • Index(es):
    • Date
    • Thread