On Thu, Jan 14, 2010 at 3:15 PM, Jamie Hardt <jamieha...@gmail.com> wrote: > On Jan 14, 2010, at 12:07 PM, Nick Zitzmann wrote: > >> Sorry, forgot that block operations, unlike invocation operations, don't >> take arguments. (Guess which one I use more often?) Yes, I'd try what you're >> proposing. > > It was a good though, but doing something like this... > > NSBlockOperation *b = [NSBlockOperation blockOperationWithBlock:^{ > > /* do stuff */ > > if ([b isCancelled]) { > > /* clean up and rejoin */ > > } > }]; > > [queue addOperation:b]; > > ...fails horribly. The debugger looks strange, I can't make sense of it.
Despite how it may look, the order of operations screws you up. The block gets created first, and only after that happens does the assignment to b occur. But creating the block copies the value of b. Because that copy happens before initialization, you get the old, uninitialized, garbage value of b. It's easy to fix, though. Just make it so that the block can follow changes to the value of b that happen after the block is created, by declaring b with the __block qualifier. 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