Objective-C中的块和对象

时间:2011-11-04 13:01:45

标签: objective-c xcode function lambda objective-c-blocks

我已经开始学习如何在Objective-C中使用块/函数/ lambda。但我不能让它与Objects一起工作。可能我错过了一些指针,但是它不起作用。 这是我目前的代码:

MyEventArgs (^skapaEventArg)(Operation); 
skapaEventArg = ^(Operation a) { return *[[MyEventArgs alloc] initWithOperation:a]; };
MyEventArgs *a = skapaEventArg(Add);

但是我得到了这张照片显示的错误:

http://img18.imageshack.us/img18/7499/blocksab.png

如果我这样做

MyEventArgs a = skapaEventArg(Add);

把它放在堆栈上,Xcode给我通常的“接口不能静态分配”-error

如何使用块来使这个简单的代码工作?

2 个答案:

答案 0 :(得分:6)

应该是:

MyEventArgs *(^skapaEventArg)(Operation); 
skapaEventArg = ^(Operation a) { return [[MyEventArgs alloc] initWithOperation:a]; };
MyEventArgs *a = skapaEventArg(Add);

请注意第一行中的*,以及第二行中缺少{{1}}。

答案 1 :(得分:0)

return *[[MyEventArgs alloc] initWithOperation:a];

我认为你得到“不兼容的类型”错误,因为你返回了解除引用的指针。