On Wed, May 20, 2009 at 8:09 AM, Graham Cox <graham....@bigpond.com> wrote:
> I have a base class in a framework, let's call it A. This has a number of
> subclasses, B C and D.
>
> I have some functionality I'd like to add that would apply to all A, B, C
> and D. So a category on A would be fine - except that I need some support in
> the form of a couple of ivars. The added functionality isn't appropriate to
> the framework, so though I have the source for A, adding ivars that have no
> place there grieves me.
>
> It also grieves me that the solution appears to be separate subclasses of B,
> C and D to add the functionality which must be duplicated for each class.
>
> Any solution I've missed?

A good compromise between redundancy and evil can be to put the
required functionality into an unrelated class, call it X. Then you
subclass B, C, and D in a minimal way, just enough to add an ivar for
an instance of X and pass messages through it. Depending on what X
implements, this could involve simply providing an accessor for the X,
implementing methods in your subclasses that call through to the X, or
even implementing forwarding so that all X methods get automatically
passed along. (The new -forwardingTargetForSelector: method in Leopard
makes this sort of forwarding super easy, although it's poorly
documented and largely unknown.)

If you want to get into extreme evils-ville, you can dynamically
create subclasses of all subclasses of A at runtime. Not recommended,
but it could be fun.

Mike
_______________________________________________

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