2012-06-30 24 views
-1

我想把下面的JS代碼翻譯成ObjC;它基本上是定義一個函數,並將其存儲在以後執行的數組: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(); 
} 
+3

也許試試NSInvocation? – 2012-06-30 21:19:54

+0

@ H2CO3 hey interresting class,剛剛閱讀介紹...感謝您的提示! – Jem

+0

我會做出答案。 – 2012-06-30 21:32:52

回答

5

使用塊:

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

這裏的a short introduction to blocks。它們是匿名函數的Objective-C等價物。

+0

哦,太棒了!並感謝鏈接!非常好! – Jem

1

我相信你應該能夠用函數指針來做到這一點。如果您的回調都以相同的類型和設置的參數,你應該能夠編寫通用代碼調用

+0

嘿,感謝您的意見,看起來像約翰卡爾斯比克提供的解決方案,只是讓它工作!祝你有美好的一天,再次感謝 – Jem

+1

C語言和派生語言中的函數指針不會捕獲它們中的值,因爲'me'和'node'正在JavaScript示例中被捕獲。 –

1

您也可以使用NSInvocation類。

相關問題