On Wed, Dec 17, 2008 at 11:14 AM, Keith Duncan <keith_...@mac.com> wrote:
>
> On 17 Dec 2008, at 15:41, Jean-Daniel Dupas wrote:
>
>>> because there's absolutely no way to guarantee that only a single
>>> NSOperationQueue
>>> exists in your process
>
> Couldn't you swizzle +[NSOperationQueue alloc] to return a singleton? Sure
> it's a hack, but a simple one that can be #ifdefed out for post Leopard
> builds. And would fix the problem for now if you've already architected a
> project around operation queues.

(It would have to be +allocWithZone: if you wanted to be absolutely
sure to catch everything, actually.)

You could, but you'd be opening yourself up to more trouble.
NSOperationQueue does have a certain amount of per-instance
configurability and state. If some external code created one and set
the max concurrent operations to a different value, or suspended it,
or used cancelAllOperations, you'd be utterly hosed. NSOperationQueue
also exposes an -operations method which is *supposed* to be useful
for watching the state of the queue (although this functionality is
IMO dubious and my replacement doesn't, and really can't, include it)
and mixing everybody's operations together into one big basket won't
do anything good for that.

There's also no guarantee that a single NSOperationQueue is safe even
if you can guarantee there are no others. Nobody has managed to
replicate my crash with it yet, but that could just mean that it's
much more rare in that case, not that it's impossible. (It certainly
could be impossible, just saying we don't know.)

And as Robert Marini points out, there are more bugs than just this
one, and this won't protect you from those.

Unfortunately it seems that there is no quick fix. If you've already
built your project around operation queues then IMO the best fix is to
imitate NSOperationQueue, minus the features you don't need and the
bugs you don't want. So far this approach has worked out great for me.

Mike
_______________________________________________

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