Re: [MyClass class] returning superclass's class
Re: [MyClass class] returning superclass's class
- Subject: Re: [MyClass class] returning superclass's class
- From: Andy Lee <email@hidden>
- Date: Thu, 20 Nov 2008 08:34:17 -0500
On Nov 20, 2008, at 7:52 AM, Ken Tozier wrote:
I guess if you never instantiate any actual objects then Andy
"proved" it, but try to create an object using one of the
superclass's methods and I think I proved that it doesn't in fact
return expected results.
As Jean-Daniel said, this is a class cluster and a "feature" of the
class cluster implementation, but it is highly counterintuitive.
[MyClass class] should return the class used to instantiate an
object, not some undocumented mystery class somewhere in a class
cluster.
I actually didn't realize NSCharacterSet is a class cluster, I was
merely trying to reproduce the exact problem you described. Surely
you realize [MyClass class] is different from
[anInstanceOfMyClassOrPossiblyASubclass class].
I got it working for my purposes by embedding an NSCharacerSet as a
property of MyClass, so all is good, but [MyClass class] returning
an undocumented class is wrong, in my opinion.
The very point of class clusters is that [[Foo foo] class] doesn't
necessarily return Foo or indeed any documented class when Foo is a
class cluster. It's only unintuitive and wrong if you don't realize
that.
The motivation for class clusters is explained here:
<http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_9.html
>
As a side note, if your design requires you to check for an exact
value of [myObject class], maybe there's a better way? I can't say
for sure without knowing what you're trying to do.
--Andy
_______________________________________________
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