On May 25, 2010, at 9:49 AM, Michael A. Crawford wrote:

>    // If the array is empty, throw an exception.  The caller should know 
> better.
>    // If there is only one, return object zero every time.
>    // If there are only two, alternate with every access.
>    // If there are three or more, randomize but never provide the same object
>    // twice in a row.

I don’t think you can provide this behavior as a category, because it requires 
extra state: each call has to remember what object was returned by the previous 
call. That state is per-object so it would need to live in the object. But 
categories don’t give you extra instance variables*. Even if you could put 
state into the object, I don’t think it’s a good design — what if you ended up 
with two clients that wanted to get random access to the same set and 
interleaved their calls?

It sounds like what you want is the iterator (aka enumerator) design pattern, 
where you create a separate lightweight object that returns the “next” item 
each time it’s called. You can then put the state in the iterator.

—Jens

* I know there are ways of doing this; but I still think it’s a bad idea, as 
the next sentence explains._______________________________________________

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