On Jun 11, 2012, at 9:50 AM, Rainer Brockerhoff wrote:

> You could subclass NSArray (tricky because it's a class cluster), adding the 
> context variable as an ivar to that; or make your own class containing that 
> context and the actual array, and implementing all the proper methods.

I don't think that will help unless there's a pointer from MyItem to its 
containing array.

> However, what I used in a similar situation is objc_getAssociatedObject() and 
> objc_setAssociatedObject() in objc/runtime.h. Look them up.

I'll bet that will add more overhead than the size of a pointer, to each 
object, so you might as well add the pointer to MyItem.

My take on this is that creating subclasses on the fly is possible (using the 
low-level ObjC API) but it seems kind of an overly complex hack, i.e. the kind 
of thing Ruby fanatics would do ;-)

Is adding 4 or 8 bytes to each object really a big deal?
Is there a way you can make the other instance data smaller to compensate for 
adding a pointer?
Alternatively, if there are less than 256 'types' of MyItem, you could add a 
byte field to the class (possibly sneaking it into space that's already there 
by making use of struct packing) and use that as an index into a global table 
of 256 kinds.

—Jens
_______________________________________________

Cocoa-dev mailing list ([email protected])

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

This email sent to [email protected]

Reply via email to