【问题标题】:Sending NSNotifications to all objects of a class向类的所有对象发送 NSNotifications
【发布时间】:2013-05-02 10:43:10
【问题描述】:

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

我实现了一种机制来强制执行这一点,如下所示:

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

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

【问题讨论】:

    标签: ios architecture nsnotificationcenter nsnotifications


    【解决方案1】:

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

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

    【讨论】:

    • 现在我保留我当前的代码,因为它在代码方面非常简单,但就像你说的那样,如果数字很大,它不会按大小缩放。如果我需要,很容易做出改变。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      相关资源
      最近更新 更多