Subject: Re: Confused about superclass initializers




Am 27.03.2009 um 15:53 schrieb Roland King:

I've thought myself into a hole in a subclass here ....

If I have a class Foo with a subclass Bar, which adds say 2 new variables, in Bar's init method I do the usual

self = [ super init ];

after someone called me with

Bar *myBar = [ [ Bar alloc ] init ];

at the point I call that, 'self' is a Bar, it was alloc()ed to be long enough for a Bar. But it's quite possible that Foo's init will not init the object it's given, it will throw it away and return me a totally different Foo, [ super init ] doesn't have to return the same thing you sent it. But if that happens, it will be a Foo returned, it won't be a Bar, Foo's constructor has no idea that it's really meant to be making a Bar, it won't have enough memory allocated to be a Bar.

Then bad things will happen when I try to set the Bar variables as I don't have enough memory for it.

Good thought :)

But this ist Objective-C, so a good class does not call [Foo alloc] but [self alloc] if it is going to allocate some new instance of itself. And even if you call [super init] (at which time self is an instance) your self in the class-methods will stay Bar.

The only problem for Foo is, that it won’t know the designated init for Bar.

But usually you get almost never something else back from super init.

atze

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@xxxxxxxxxxxxxxx)

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:
http://lists.apple.com/mailman/options/cocoa-dev/maillists%40codeha.us

This email sent to maillists@xxxxxxxxx

...



Privacy