• 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: warning: assignment from distinct Objective-C type
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: warning: assignment from distinct Objective-C type


  • Subject: Re: warning: assignment from distinct Objective-C type
  • From: Stuart Malin <email@hidden>
  • Date: Tue, 11 Mar 2008 08:03:10 -1000

Brilliant Julien!  Thank you!

I had always been curious why initializers returned id, since their return could be made specific to the class.

I've been doing what I've done in many classes, and some give me grief, and not others.

Both of your assessments are correct.

To validate #1, if I change the offending line of code to do a cast:

	xmppStream = [(XMPPStream*)[XMPPStream alloc] initWithDelegate:self];

the warning goes away. Of course, that's ugly and I won't retain that code change because the deeper problem is exactly what you refer to in item #2 -- I do have more than one class with the same initializer signature. I'd thought the compiler would choose the right one because I'd naively presumed that [className alloc] returned an instance in that class, not an object of type id.

This is  probably why I had to cast in my initializer:

	- (XMPPStream*) initWithDelegate:(id)initialDelegate
	{
	self = (XMPPStream*)[super init];

If I change my initializer method name as you suggest so that it has a unique signature,

	- (XMPPStream*) initXMPPStreamWithDelegate:(id)initialDelegate;

and the creation of an instance accordingly:

	xmppStream = [[XMPPStream alloc] initXMPPStreamWithDelegate:self];

all now compiles cleanly.

Now, the question is: is it bad to continue doing what I've been doing in having the initializer interface defined to not return id but an instance of the actual class? Or would my continuing to do this merely be a non-conventional coding style?

--Stuart

On Mar 10, 2008, at 11:16 PM, Julien Jalon wrote:

1) All init methods should return (id) not a specific class
2) your initWithDelegate: is likely too generic as a name and its signature conflicts with an other one.


Since [XMPPStream alloc] is typed id, the compiler might not be sure of what method signature you want to use for -initWithDelegate:

In the second case, the compiler knows you are using -[XMPPStream initWithDelegate:]

I tend to remember that the compiler warning was more specific before Leopard, maybe a regression.

Nonetheless, good coding style should lead you to rename your method to:

- (id)initXMPPStreamWithDelegate:(id)aDelegate;

instead of:

- (XMPPStream *)initWithDelegate:(id)aDelegate;

--
Julien

On Tue, Mar 11, 2008 at 9:19 AM, Stuart Malin <email@hidden> wrote:
I have a line of code:


       xmppStream = [[XMPPStream alloc] initWithDelegate:self];

That when compiled, receives a warning:

warning: assignment from distinct Objective-C type

Now, what's odd to me, is if I change the source code to this:

       xmppStream = [XMPPStream alloc];
       [xmppStream initWithDelegate:self];

It compiles without any warning.

The interface for the XMPPStream initializer is:

       - (XMPPStream*) initWithDelegate:(id)initialDelegate;

And, in the file that is allocating and initializing, the xmppStream
variable is defined as:

       XMPPStream      *xmppStream;

So I don't see any reason that I should get the warning.
Any clues about why this happens would be appreciated.
I'm sure I must be overlooking something obvious...

This is happening with Xcode 2.4.1

[I have posted to both Cocoa and Xcode because I have no idea which
list would be better for this]



_______________________________________________

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


_______________________________________________

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: warning: assignment from distinct Objective-C type
      • From: "Julien Jalon" <email@hidden>
References: 
 >warning: assignment from distinct Objective-C type (From: Stuart Malin <email@hidden>)
 >Re: warning: assignment from distinct Objective-C type (From: "Julien Jalon" <email@hidden>)

  • Prev by Date: Re: To unmount a volume
  • Next by Date: Re: Displaying at appropriate time after text layout...?
  • Previous by thread: Re: warning: assignment from distinct Objective-C type
  • Next by thread: Re: warning: assignment from distinct Objective-C type
  • Index(es):
    • Date
    • Thread