问题
I'm trying to translate the following JS code to ObjC; It basically defines a function and store it in an array for later execution:
var logic = function() {
me.removeNode(node);
}
this.queue.push(logic);
My ObjC port contains the method: -(void)removeNode:(AbstractNode*)node and I'm stuck... I would like to just queue a call to this method using the specified "node" argument...
edit: I'm reading about selectors. It's still blurry, but might help. Somehow. Or not?
Is it even possible, or will I need to find a workaround :-) ? Thanks!
Solution to this thanks to the community:
// Queue declaration
NSMutableArray *IRQ = [[NSMutableArray array] retain];
// Add logic to the queue for delayed execution:
[IRQ addObject:^{ NSLog(@"thanks for the help!"); } ];
// Call later
for (int i = 0; i < [IRQ count]; i++){
void (^delayedCall)(void) = [IRQ objectAtIndex:i];
delayedCall();
}
回答1:
Use a block:
[queue addObject:^{
[me removeNode:node];
}];
Here's a short introduction to blocks. They are the Objective-C equivalent of anonymous functions.
回答2:
I believe you should be able to do this with function pointers. If your call backs all take the same type and set of arguments you should be able to write generic code for invoking
回答3:
You can also use the NSInvocation class.
来源:https://stackoverflow.com/questions/11277745/objc-put-logic-within-a-variable-and-queue-that-variable-in-an-array-daydre