ObjC: Put logic within a variable, and queue that variable in an array… daydreaming?

℡╲_俬逩灬. 提交于 2019-12-13 07:48:55

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!