On Jun 2, 2008, at 10:01 AM, Jens Alfke wrote:

On 2 Jun '08, at 9:12 AM, Todd Ransom wrote:

It seems that what I need is a non-retaining array. I googled around a bit and was surprised that I could not find an existing implementation. It looks like I can create one by subclassing NSMutableArray, overriding the primitive methods, and using a CFArray as the backing store with NULL callbacks to avoid any kind of retain or release when objects are added or removed.

You can also do cool things like store integers and NULL values in CFArray/CFDictionary/CFSet with appropriate callbacks; OmniFoundation has some predefined callbacks that can be useful examples.

It's even easier than that, thanks to CF/NS bridging. You can just use the CFArray API to create an array with no-op retain/release callbacks, and then cast the CFArrayRef to NSArray* and use it as an NSArray.

Jens alludes to using NULL retain/release, and that's a subtlety that you might want to watch out for. If you want NSArray semantics for things like indexOfObject:, you should write a callback function for equality that uses isEqual:. If you pass NULL for the callbacks, you'll get pointer equality.

--
adam
_______________________________________________

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