将NSNotifications发送到类的所有对象

时间:2013-05-02 10:43:11

标签: ios architecture nsnotificationcenter nsnotifications

我有一个可以通过用户点击选择的对象。根据应用程序的当前要求,在应用程序执行期间的任何时间点都不会选择其中一个项目。

我实施了一种强制执行此操作的机制,如下所示:

  • 这些对象中的每一个都有一个唯一的标识符作为属性。
  • 创建每个对象时,它会订阅NSNotificationCenter收听MY_OBJECT_SELECTED通知。
  • 当选择每个对象时,它会发布MY_OBJECT_SELECTED通知,其唯一ID作为userInfo字典的一部分。
  • 然后,当每个对象收到通知时,它会检查其id是否与userInfo中的id相同。如果是,它什么都不做,但如果不是,它会将自己设置为未选中。

这是一个解决问题的好方法吗?如果没有,你会怎么做?

2 个答案:

答案 0 :(得分:1)

这是一种不错的方式,虽然效率不高。您拥有的对象越多,您花在比较ID上的时间就越多。最简单的方法是将对象指针和ID存储在地图表(或类似)中,并记住最后选择的对象。无论何时选择新对象,都要清除最后一个选定对象的选择标志,然后查找新对象并设置其选择标志。但是,它要求您保留对象的集合。

使用此方法更新选择所需的时间与您拥有的对象数量无关。

答案 1 :(得分:0)

如果对象遍布应用程序,即如果它是各种类的成员。您可以拥有相同类型的全局对象,并将其仅分配给已触摸的对象。在步骤中它将是:

  • 拥有对象类型的全局变量。
  • 在任何对象触摸时分配globalObject = currentObject;
  • 在整个应用程序中对globalObject执行所有操作,如调用方法和修改对象成员(检查nil以确保安全)。
  • 以新的方式重新分配给不同的对象。