0

我是来自 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 可能会导致泄漏,因为它的选择器是未知的!”

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

4

1 回答 1

2

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

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

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

@property(nonatomic, copy) MyBlock block;

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

self.block(someArray, someString);
于 2013-01-10T00:36:58.630 回答