On 15/06/2012, at 3:56 AM, Dave wrote: > > On 14 Jun 2012, at 05:12, Graham Cox wrote: > >> >> On 14/06/2012, at 8:03 AM, Dave wrote: >> >>> In assembler this would be implemented is using an "Exchange Instruction" >>> to alter the PC on the stack and cause it to return to the correct place >>> once the ASync Task (usually an interrupt) had finished. >> >> >> Ah, those were the days - push a calculated address on the stack and do a >> 'RET' to cause a jump to that address... thankfully such tricks are wholly >> unnecessary these days. In fact a simple switch...case statement does the >> same job in most cases. >> >> I'm not sure of the answer to your question though, seems to me you could >> simply queue each task then the next executes as soon as the one ahead of it >> finishes. >> > > The point is you can't queue B until the data from A has been obtained and > that might take a long while. There are two ways to deal with it, either have > a call back from the lower level that returns the data (in which case you > have to specify an address/selector to go to when the data has been obtained > sucessfully), OR you can invert the control and make the interface look as it > is demand based, even though the data is being obtained as and when it is > ready.
I can't really see the problem here. You can still queue the tasks, even if the queued task doesn't have the data available when it's queued - the data will be available by the time it comes to run, so it can just ask for it then. It's really simple to create demand-based data providers in Cocoa using informal or formal protocols, delegation, or passing a predefined selector/target as you suggest. Or using NSInvocation. There are many solutions, there's probably no One True Way™ but certainly you have the tools at your disposal - there are plenty of solid reliable solutions that require no particular tricks, and certainly nothing skanky of the sort you were reminiscing about! --Graham _______________________________________________ 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com