Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 我必须在目标c的.h文件中声明回调方法吗?_Objective C_Ios_Callback_Selector - Fatal编程技术网

Objective c 我必须在目标c的.h文件中声明回调方法吗?

Objective c 我必须在目标c的.h文件中声明回调方法吗?,objective-c,ios,callback,selector,Objective C,Ios,Callback,Selector,我有两个类A和B。类A给类B一个目标/动作对,B类稍后回调。目标是self(=类A),操作是回调方法。稍后将使用以下命令完成回调: [target performSelector:action withObject:anObject]; 方法操作仅由此回调调用。如果我不在类A的.h文件中声明该方法,它可以正常工作。但我的问题是,不在.h文件中声明它是一个糟糕的设计吗?由于该方法只在回调中调用,我认为不必声明它,不是吗?我的意思是,回调“performSelector”甚至不能检查该方法在运行时

我有两个类A和B。类A给类B一个目标/动作对,B类稍后回调。目标是self(=类A),操作是回调方法。稍后将使用以下命令完成回调:

[target performSelector:action withObject:anObject];

方法操作仅由此回调调用。如果我不在类A的.h文件中声明该方法,它可以正常工作。但我的问题是,不在.h文件中声明它是一个糟糕的设计吗?由于该方法只在回调中调用,我认为不必声明它,不是吗?我的意思是,回调“performSelector”甚至不能检查该方法在运行时是否存在。那么你的建议是什么呢?

为了清晰起见,我会在
.h
中声明它(尽管它不是必需的),因为它是从
B
公开访问的为了清晰起见,我会在
.h
中声明它(尽管它不是必需的),因为它是从
B
公开访问的

我认为没有必要申报,是吗

不,不是,真的。我经常看到这种模式,事实上,我并没有声明这些仅回调/委托的方法

我的意思是,回调“performSelector”甚至不能检查该方法在运行时是否存在

但是,是的,多亏了反思,它可以;写下这样的话:

if ([delegate respondsToSelector:@selector(someCallback:)]) {
    [delegate someCallback:self];
}
但是如果您真的担心这个问题,最好使用块来进行简单的回调,而不是委托

我认为没有必要申报,是吗

不,不是,真的。我经常看到这种模式,事实上,我并没有声明这些仅回调/委托的方法

我的意思是,回调“performSelector”甚至不能检查该方法在运行时是否存在

但是,是的,多亏了反思,它可以;写下这样的话:

if ([delegate respondsToSelector:@selector(someCallback:)]) {
    [delegate someCallback:self];
}

但是如果您真的担心这个问题,最好使用块来进行简单回调,而不是委托。

不太好。OP似乎将选择器传递给了另一个类。另一个类不知道调用的方法的名称。不知道。OP似乎将选择器传递给了另一个类。另一个类不知道调用的方法的名称。