使用块创建回调

时间:2013-01-10 00:34:07

标签: objective-c callback objective-c-blocks

我是来自JavaScript世界的Objective-C的新手,我正在尝试在类上定义“回调”属性。在JavaScript领域,我们习惯于不知不觉地传递函数,但似乎Objective-C并不那么宽松。

以下是我尝试这样做的方法(尝试尽可能地简化事情):

@interface CallbackThing : NSObject
  @property (nonatomic) NSString *derpDerp;
  @property (nonatomic) SEL callback;
@end

然后在另一个班级......

CallbackThing *testCallbackThing = [CallbackThing alloc] init];
testCallbackThing.callback = @selector(methodInThisCLass);

最后在另一堂课......

if (self.testCallbackThing.callback != nil){
    [self.thatOtherClass performSelector:self.testCallbackThing.callback];
}

这很棒!我为自己感到骄傲......直到......

“警告:performSelector可能导致泄漏,因为其选择器未知!”

尝试阅读事物,似乎新的做事方式是使用块......但在这种情况下,我所看到的所有例子都没有多大意义。

1 个答案:

答案 0 :(得分:2)

不确定您的具体用例是什么,但块很容易。首先,声明您的块类型:

typedef void (^MyBlock)(NSArray*, NSString*);

然后你可以将它设置为属性,就像你用SEL做的那样:

@property(nonatomic, copy) MyBlock block;

然后,您只需调用执行它的块:

self.block(someArray, someString);