【问题标题】:Do I have to declare a callback method in .h file in objective c?我是否必须在目标 c 的 .h 文件中声明回调方法?
【发布时间】:2012-10-11 08:01:46
【问题描述】:

我有两个类 A 和 B。A 类给 B 类一个目标/动作对,B 类稍后会回调该对。目标是 self (= class A),action 是一个回调方法。回调稍后完成:

[target performSelector:action withObject:anObject];

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

【问题讨论】:

    标签: objective-c ios callback selector


    【解决方案1】:

    我觉得没必要申报吧?

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      为了清楚起见,我会在.h 中声明它(尽管没有必要),因为它是从B 公开访问的。

      【讨论】:

      • 并非如此。似乎 OP 将选择器传递给了另一个类。另一个类不知道被调用方法的名称。
      猜你喜欢
      • 2013-06-28
      • 2018-03-15
      • 1970-01-01
      • 2016-10-31
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多