On Mar 11, 2013, at 1:55 PM, Dave <d...@looktowindward.com> wrote:
> Not sure I understand:
> 
> if from an Instance - Method, I do:
> 
> [super someMehod];
> 
> It calls -someMehod in the superclass.
> 
> if from an instance  + Method I do:
> 
> [super someMethod], then surely it's an error because this isn't an instance?

A class is an object. Inside a class method, `self` is a class object, and 
[super someMethod] sends a message to that class object, searching for a class 
method implemented by some superclass.

(If a class is an object, then the class object must be an instance of some 
other class, right? Right: 
http://sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html
 )


> So from a + method, what do:
> 
> [super someMethod]; and
> [[self superclass] someMethod];

These are similar but not identical. In your [NewClass newDict] example:

* [super newDict] calls +[BaseClass newDict].
* [[self superclass] newDict] also calls +[BaseClass newDict].

The difference is which object the message is sent to.

* [super newDict] calls +[BaseClass newDict], and inside that method `self` is 
the class object NewClass.
* [[self superclass] newDict] calls +[BaseClass newDict], and inside that 
method `self` is the class object BaseClass. (Because that's what the [self 
superclass] returned).


The [[self superclass] newDict] version is inferior for various reasons. It 
will do unexpected things in some circumstances (for example, if NewClass 
itself has a subclass). It's more code to type, and runs slower, and can bypass 
some of the compiler's type checking. You should use [super newDict].


-- 
Greg Parker     gpar...@apple.com     Runtime Wrangler



_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to