Wow.. great information! Thank you very much for sharing your idea! It definitely helped me!
JongAm Park On Jun 30, 2011, at 2:41 PM, Quincey Morris wrote: > > On Jun 30, 2011, at 13:51, JongAm Park wrote: > >> The rationale behind "enumerator" pattern is to unify the way to access >> collection classes no matter what they actually look like. >> So, enumerator pattern is actually written in index based iteration wrapped >> with enumerator pattern. >> Similarly, I guessed fast enumeration was based on either index iteration or >> enumerator pattern. > > No, not necessarily, if by "index iteration" you mean 'objectAtIndex:'. > > NSArray has 2 primitive methods (count and objectAtIndex:) that a concrete > subclass must implement. It also conforms to NSFastEnumeration, so a concrete > subclass must also implement 'countByEnumeratingWithState:objects:count:'. > That's three primitive methods you know for sure are implemented in any > concrete subclass. > > There's no way of knowing (in general) whether these primitive > implementations make use of each other. I'm virtually certain, for example, > that in NSCFArray (the standard but private concrete subclass of NSArray), > countByEnumeratingWithState:objects:count: doesn't use objectAtIndex:, > because part of the point of fast enumeration is to eliminate per-object > method calls if possible. I'm also virtually certain that NSCFArray's > enumerator uses the fast enumeration method > countByEnumeratingWithState:objects:count: directly, rather than using > objectAtIndex:. > > The method you wrote is non-primitive. However, you know that all of the > primitive methods and protocols are implemented, so it's safe to use those > directly (as others already replied). It's also safe to use all of the > standard non-primitive methods, because the abstract NSArray class provides > default implementations of all of them, regardless of whether a subclass > overrides them for performance reasons. > >> Also, fast enumeration is a language feature. So, if Objective-C without >> fast enumerator is used, methods written with fast enumerator would not work. > > If an older Objective-C runtime is used, you'll get an "invalid selector" > exception for 'countByEnumeratingWithState:objects:count:', so yes it would > not work in that sense. > > _______________________________________________ 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