【问题标题】:ObjC: Put logic within a variable, and queue that variable in an array... daydreaming?ObjC:将逻辑放在一个变量中,然后将该变量放入一个数组中……做白日梦?
【发布时间】:2012-06-30 21:17:33
【问题描述】:

我正在尝试将以下 JS 代码转换为 ObjC;它基本上定义了一个函数并将其存储在一个数组中以供以后执行:

var logic = function() {
    me.removeNode(node);
}
this.queue.push(logic);

我的 ObjC 端口包含方法:-(void)removeNode:(AbstractNode*)node,但我被卡住了...我只想使用指定的“节点”参数对这个方法的调用进行排队...

编辑:我正在阅读有关选择器的信息。它仍然模糊,但可能会有所帮助。不知何故。还是不行?

是否有可能,或者我需要找到解决方法:-)? 谢谢!

感谢社区的解决方案:

// 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();
}

【问题讨论】:

  • @H2CO3 嘿,有趣的课程,只需阅读介绍...谢谢您的提示!

标签: objective-c function queue


【解决方案1】:

使用块:

[queue addObject:^{
    [me removeNode:node];
}];

这里是a short introduction to blocks。它们是匿名函数的 Objective-C 等价物。

【讨论】:

    【解决方案2】:

    我相信你应该能够使用函数指针来做到这一点。如果您的回调都采用相同的类型和参数集,您应该能够编写用于调用的通用代码

    【讨论】:

    • 您好,感谢您的意见,看起来 John Calsbeek 提供的解决方案刚刚成功!祝你有美好的一天,再次感谢
    • C 和派生语言中的函数指针无法捕获其中的值,因为在 JavaScript 示例中捕获了 menode
    【解决方案3】:

    您也可以使用 NSInvocation 类。

    【讨论】:

      猜你喜欢
      • 2013-05-31
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2022-12-01
      • 2018-10-08
      相关资源
      最近更新 更多