【问题标题】:Blocks and Objects in Objective-CObjective-C 中的块和对象
【发布时间】:2011-11-04 13:01:44
【问题描述】:

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

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

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

如果我这样做

MyEventArgs a = skapaEventArg(Add);

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

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

【问题讨论】:

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


    【解决方案1】:

    应该是:

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

    注意第一行中的*,第二行中缺少它。

    【讨论】:

    • 啊!谢谢。我知道我的指针有问题。这是我没有尝试过的组合之一。但我明白为什么。必须将返回值指定为声明中的指针。
    【解决方案2】:
    return *[[MyEventArgs alloc] initWithOperation:a];
    

    我认为您会收到“不兼容类型”错误,因为您返回了取消引用的指针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多