0

遵循各种 Objective-C 编程指南中强调的 MVC 模式,当我使用带有控制器的模型时,我应该将控制器设置为delegate给定模型的。现在我有一个巨大的 Data 对象,创建起来非常昂贵,并且有一些控制器需要使用这个 Data 对象。只要将delegate属性设置为正确的 Controller,Data 对象就可以在该控制器上正常工作。有没有办法在这些控制器之间共享这个模型?

我已经集思广益了一段时间,但还没有想到任何特别好的解决方案。我提出的一些事情

  1. 使用通知中心(但仅针对这种特定情况建立这样的关系似乎很昂贵)
  2. 使 Data 对象的每个方法都带有一个delegate参数:这是我现在正在使用的,但它很笨重并且正在达到其极限

编辑

感谢那些向我建议使用 NSArray 的人。我想我忘了包括这个微妙之处:

就我而言,假设其中一位代表A想要使用 Data 对象的一种特定方法来查询它。delegate如果Data 对象的字段设置为 ,结果将是正确的A。但是据我了解,使用数组并在每个委托上调用该方法不会给我想要的答案。

事实上,由于我的 Data 对象不知道哪个委托正在调用它,因此即使它知道应该与之关联的所有委托,它也无法返回正确的结果

对此有什么想法吗?

4

3 回答 3

0

如果您不想使用通知,可以尝试使用多播委托方法。在这种情况下,您将保留一个NSMutableArray代表而不是一个代表。因此,您可以从委托数组中添加和删除委托,而不是设置委托。调用委托时,您将在数组中的每个委托上调用该委托方法,检查每个委托是否响应该特定回调。如果您愿意,您还可以控制调用委托的顺序,因为您自己创建和管理委托数组。

于 2013-06-27T18:41:16.887 回答
0

您可以NSArray使用委托创建一个,然后只需在数组中的每个委托上调用该方法。(注意保留周期)。

于 2013-06-27T18:40:14.960 回答
0

我最终做的是设置另一个级别的间接 - 每个控制器将与一个“中间件”对象通信,该对象又与数据对象通信。通过这种方式,保留了常见的委托 - 委托方法,而 Data 对象只需要创建一次 - 代价是为每个 Controller 添加了“中间人”对象。

在我的示例中,“中间件”对象将设置一个控制器作为其委托属性,当该控制器想要了解有关数据对象的信息时,“中间件”对象将使用其委托属性从数据对象中查询信息.

于 2013-06-30T12:50:12.050 回答