我是来自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可能导致泄漏,因为其选择器未知!”
尝试阅读事物,似乎新的做事方式是使用块......但在这种情况下,我所看到的所有例子都没有多大意义。
答案 0 :(得分:2)
不确定您的具体用例是什么,但块很容易。首先,声明您的块类型:
typedef void (^MyBlock)(NSArray*, NSString*);
然后你可以将它设置为属性,就像你用SEL做的那样:
@property(nonatomic, copy) MyBlock block;
然后,您只需调用执行它的块:
self.block(someArray, someString);