So you mean that

if ( self == [aReceiver class] )

is the same as

if ( [self class] == [aReceiver class] ) ?


Yes it is.


Just a simple snippet to try to help you to understand.

We are ok to say that in a method, self represents the receiver.

Now have a look at this call:

[PDFDocument allocWithZone:nil]

You are ok to say that it is equivalents to:

[[PDFDocument class] allocWithZone:nil]

With the second form, you clearly see here that the receiver is [PDFDocument class]. And as self is the receiver, (self == [PDFDocument class]) is perfectly valid to test class equality.


Hmm...

I think this example does not cover my doubt expressed above. I actually now think that both examples I wrote above are wrong or at least semantically wrong.

The thing is: 'self' is a pointer to class instance and of course an actual parameter for the Obj-C runtime routines.

The example you gave is that you are talking about class methods that do not and should not be used with pointers to class instances but to receivers that are class names (in your example 'PDFDocument') or class objects returned by, using your example, [PDFDocument class]. As far as I know class objects and class instances are two different things.

I think the following comparison is semantically wrong:

if ( self == [MyClass class] )

This statement is comparing a pointer to an object instance (self) to a MyClass object (returned by the invocation of +[NSObject class] method) and these are two different animals altogether, unless the Obj- C runtime deals with this and does the right thing.

My fix is actually semantically wrong too:

if ( [self class] == [myClass class] )

because I am using a receiver (self) that should be a class name (but it is a pointer to a class instance) in a class method, whose receiver must be a class name or a class object.

Actually the fix should have been:

if ( [self isKindOfClass:[myClass class]] )

because in this case -isKindOfClass is an instance method whose receiver is a class instance, not a class object.

If my reasoning is not correct then the Obj-C runtime is rather messy, which I think that is not the case.

JV





_______________________________________________

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

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

Reply via email to