将对viewControllers的引用传递给其他viewControllers cocoa touch

时间:2013-08-05 03:38:20

标签: ios pointers uiviewcontroller

我设计代码的方式,有几个视图控制器,相互作用,我需要在视图控制器之间传递数据。我这样做的方式是“传递一个引用”,制作一个指针,作为方法参数,如下所示:

-(void)aMethodToSetUpInterfaceElements:(UIViewController*)targetCV

这有什么问题,还是我需要注意?它在功能级别上运行良好,但设计呢?

2 个答案:

答案 0 :(得分:2)

这没有什么不对。

如果它适合你,那就没关系。只需确保对视图控制器有weak引用,否则可能会因保留周期而导致内存泄漏。阅读本文以获取更多信息:http://www.cocoawithlove.com/2009/07/rules-to-avoid-retain-cycles.html

谈到设计,它实际上取决于每个案例。我不能说精确,因为你没有提供更多关于你想要实现的功能的信息。

也许如果您想使代码更通用,以便在其他地方或项目中使用,您可能会考虑对视图控制器执行委托,但这取决于您的视图层次结构及其设计。要查看有关在viewControllers之间传递数据的更多信息,请参阅:Passing Data between View Controllers

答案 1 :(得分:0)

如果您没有足够的理由,我认为传递视图控制器以传输其数据并不是一个好主意。我倾向于将最小的知识暴露给另一个对象。

例如,假设您有两个视图控制器controllerAcontrollerB

  • 如果只需要将controllerA的某些数据传递给controllerB,则可以传递数据,可能是NSDataNSArray,{ {1}}或您的自定义数据结构。您不应将整个NSDictionary作为参数传递给controllerA。虽然您可以使用controllerB getter访问数据,但您已经对controllerA.datacontrollerA了解了太多,这可能会通过增加{{1}之间的耦合而无意识地破坏您的设计。 }和controllerB
  • 如果您的目标是处理视图转换,那么将视图控制器作为参数传递可能是一个很好的理由。这样你就可以很好地利用它的controllerA来呈现一个模态视图,或者将它推入导航控制器,或者你可能想要获得对它的controllerB属性的引用并自定义你自己的UI表示