Ara*_*and 16 c++ objective-c ios4 objective-c-blocks
我有一个与Objective-C一起使用的C++助手类.我想从视图控制器(回调)传递c ++类一个块,这样当它执行时我就在主线程上并且可以更新UI.我目前有一个类似的系统使用函数指针和performSelector调用函数时.我想要一个如何设置c ++变量以及如何将Objective-C块传递给它并从c ++类调用它的示例.
如果这是不可能的,你能想到另一个/更好的解决方案吗?
nil*_*nil 13
那么你是不是完全熟悉块语法?如果是这样的话,这里有一个快速的例子,如果你已经熟悉函数指针(语法或多或少相同,但是使用一个^用于声明一个[创建一个闭包当然是不同的],这应该是有意义的.]).
你可能想为块类型设置一个typedef只是为了节省你自己一遍又一遍地重复相同的事情,但是我包含了使用typedef并且只是将块类型本身放在参数中的示例.
#import <Cocoa/Cocoa.h>
// do a typedef for the block
typedef void (^ABlock)(int x, int y);
class Receiver
{
public:
// block in parameters using typedef
void doSomething(ABlock block) {
block(5, 10);
}
// block in parameters not using typedef
void doSomethingToo(void (^block)(int x, int y)) {
block(5, 10);
}
};
int main (int argc, char const *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Receiver rcv;
// pass a block
rcv.doSomething(^(int x, int y) { NSLog(@"%d %d", x, y); });
rcv.doSomethingToo(^(int x, int y) { NSLog(@"%d %d", x, y); });
[pool drain];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请参阅将块用作函数参数.声明方法时,请使用类似于以下语法的语法来声明块参数:
void theFunction(blockReturnType (^argumentName)(blockArgumentTypes));
Run Code Online (Sandbox Code Playgroud)
块调用看起来像一个函数调用,所以theFunction上面的一个实现只是调用块并返回它的结果,如下所示:
int theFunction(int anArgument, int (^theBlock)(int)) {
return theBlock(anArgument);
}
Run Code Online (Sandbox Code Playgroud)
此语法适用于C,C++和Objective-C.
| 归档时间: |
|
| 查看次数: |
6663 次 |
| 最近记录: |