On May 23, 2008, at 9:19 PM, Graham Cox wrote:


On 24 May 2008, at 7:34 am, Bill Bumgarner wrote:

The NSEnumerator stuff is prone to introducing silly errors, is inefficient, and not very pleasant to look at.

Can you go into more detail about the efficiency improvements? I do use a lot of NSEnumeration-based code and this *could* convince me to use Obj-C 2.0 enumeration (though at present I'm still rather keen to support Tiger). What sort of gains are we looking at? twice as fast? ten times? Or 1.1 times?

I did some crude benchmarking a while back and found that NSFastEnumeration was roughly the same as using CFArrayGetValueAtIndex() in a loop, and both were faster than using NSEnumerator or -[NSArray objectAtIndex:].

The significance of this depends on your situation, of course. In an app that enumerates thousands of small collections while parsing a file, dumping NSEnumerator in favor of CF functions was a big win in terms of time and memory profiles in Shark, mainly because of the overhead associated with creating/using/destroying lots of enumerators. NSEnumerator also sends retain/autorelease to the last object of its collection, so it can cause a pool to fill up if you're not careful.

Here's an interesting graph, although a bit dated now:

http://www.mulle-kybernetik.com/forum/Optimization/viewtopic.php?t=27&sid=a6c5e357369c081eb672a8f604cdda98

This article has comparisons of Obj-C and CF overhead:

http://www.mulle-kybernetik.com/artikel/Optimization/opti-3-imp-deluxe.html

_______________________________________________

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