On Mar 26, 2008, at 11:43 PM, Graham Cox wrote:
I have a class that can contain different objects which all derive from a class R. The container can accept instances of any subclass of R.

Each subclass of R implements a CLASS method for a particular feature, returning an array. The container needs to build an array which is the union of all the arrays returned by each subclass. Thus it needs to iterate through a list of all possible subclasses of R, combining the arrays as it goes. Problem is that not all possible subclasses of R are known until runtime, so I need a way to be able to get hold of such a list, based on the fact that they all inherit from R. Note that these are not instances of R, but classes. (I can get a list of instances I have right now, but that doesn't cover the possibility of another object instance derived from R being added after I already built the array).

Hope this makes sense - any ideas?

You seem to have solved this, but there might be a better way:

Implement +initialize on class R. Reading the docs on +initialize, you'll find that it's called for subclasses of R, too, if those subclasses don't override +initialize. Even if a subclass does override +initialize, you can make it a part of the design contract that they must call [super initialize]. (Yes, that goes against a suggestion in the docs, but in this case you're doing it with eyes open for a specific purpose.)

So, now you have arranged that R's +initialize is called for R and every one of its subclasses. In that method, you can use "self" to refer to the actual (sub)class being initialized and do whatever is appropriate from there.

I hope that's useful,
Ken

_______________________________________________

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 [EMAIL PROTECTED]

Reply via email to