我设计代码的方式,有几个视图控制器,相互作用,我需要在视图控制器之间传递数据。我这样做的方式是“传递一个引用”,制作一个指针,作为方法参数,如下所示:
-(void)aMethodToSetUpInterfaceElements:(UIViewController*)targetCV
这有什么问题,还是我需要注意?它在功能级别上运行良好,但设计呢?
答案 0 :(得分:2)
这没有什么不对。
如果它适合你,那就没关系。只需确保对视图控制器有weak
引用,否则可能会因保留周期而导致内存泄漏。阅读本文以获取更多信息:http://www.cocoawithlove.com/2009/07/rules-to-avoid-retain-cycles.html
谈到设计,它实际上取决于每个案例。我不能说精确,因为你没有提供更多关于你想要实现的功能的信息。
也许如果您想使代码更通用,以便在其他地方或项目中使用,您可能会考虑对视图控制器执行委托,但这取决于您的视图层次结构及其设计。要查看有关在viewControllers之间传递数据的更多信息,请参阅:Passing Data between View Controllers
答案 1 :(得分:0)
如果您没有足够的理由,我认为传递视图控制器以传输其数据并不是一个好主意。我倾向于将最小的知识暴露给另一个对象。
例如,假设您有两个视图控制器controllerA
和controllerB
。
controllerA
的某些数据传递给controllerB
,则可以传递数据,可能是NSData
,NSArray
,{ {1}}或您的自定义数据结构。您不应将整个NSDictionary
作为参数传递给controllerA
。虽然您可以使用controllerB
getter访问数据,但您已经对controllerA.data
到controllerA
了解了太多,这可能会通过增加{{1}之间的耦合而无意识地破坏您的设计。 }和controllerB
。 controllerA
来呈现一个模态视图,或者将它推入导航控制器,或者你可能想要获得对它的controllerB
属性的引用并自定义你自己的UI表示