通过几个不相关的类传递方法调用

时间:2015-07-27 23:54:52

标签: ios objective-c

这有一种响应者链的感觉,但不同之处在于,响应者链是视图和视图控制器的特定操作。

好吧,我需要通过几个不相关的类传递一个方法调用,并且对Objective-C来说是相当新的,我不确定它是否会定义一个协议,然后在每个协议上实现该协议呼叫需要通过的类。

例如...... ClassA是ClassB的委托。
ClassB是ClassC的委托
...因此'响应者链'的感觉。

将代码传递给从C到B的调用是否合理。

我认为在某些时候,当链条变得太长时,你可能会推荐一种通知技术,但我不知道建议的长度是多少。

  # create_table "sources", force: true do |t|
  #   t.string   "device_id"
  #   t.string   "source_type"
  #   t.string   "source_identifier"
  #   ...

  # create_table "users", force: true do |t|
  #     #   t.string   "email",                  default: "", null: false
  #   t.string   "encrypted_password",     default: "", null: false
  #    ...
  #   t.string   "first_name"
  #   t.string   "last_name"
  #   t.string   "phone"
  #   t.integer  "source_id"
  #   ...

  # create_table "memberships", force: true do |t|
  #   t.integer  "user_id"
  #   t.integer  "organization_id"
  #   t.datetime "verified_at"
  #   ...

2 个答案:

答案 0 :(得分:3)

不。没有错。除了潜在的复杂性。

如果需要,您可以将其定义为协议。或者您可以将其定义为常见的抽象超类(如果可能)。

协议通常是目前使用的方式,使用@optional需要使用respondsToSelector:测试(或conformsToProtocol:)。

总而言之,你应该非常小心使用这种模式。具体来说,它意味着很多关于应用程序的体系结构,因此,您希望确保体系结构是健全的。

答案 1 :(得分:2)

另一种方法是使用NSNotificationCenter发布NSNotification。对象可以将自己添加为观察者。根据您的需要,这可能是通过委托链传递消息的一个很好的替代方案。

如果多个对象需要响应消息,则此功能特别有用。