On 28/03/2008, at 3:23 AM, Ken Thomases wrote:

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.

The problem with using initialize is that it's only guaranteed to be sent just before the first message is sent to that class (which might not be at all if the class isn't used).

- Chris

_______________________________________________

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