我设计代码的方式是使用多个交互的视图控制器,我需要在视图控制器之间传递数据。我这样做的方式是“传递一个引用”,创建一个指向目标视图控制器的指针,作为方法参数,如下所示:
-(void)aMethodToSetUpInterfaceElements:(UIViewController*)targetCV
这有什么问题吗,还是我需要注意?它在功能层面上运行良好,但设计呢?
我设计代码的方式是使用多个交互的视图控制器,我需要在视图控制器之间传递数据。我这样做的方式是“传递一个引用”,创建一个指向目标视图控制器的指针,作为方法参数,如下所示:
-(void)aMethodToSetUpInterfaceElements:(UIViewController*)targetCV
这有什么问题吗,还是我需要注意?它在功能层面上运行良好,但设计呢?
这并没有什么错。
如果它对你有用,那就没关系。只需确保weak引用视图控制器,否则您可能会在保留周期中出现内存泄漏。阅读此内容以获取更多信息: http: //www.cocoawithlove.com/2009/07/rules-to-avoid-retain-cycles.html
说到设计,这真的取决于每种情况。我不能准确地说,因为您没有提供有关您要实现的功能的更多信息。
也许如果您想让您的代码更通用,以便在其他地方或项目中使用,您可能会考虑对您的视图控制器执行委托,但这取决于您的视图层次结构及其设计。要查看有关在视图控制器之间传递数据的更多信息,请参阅:在视图控制器之间传递数据
如果您没有足够的理由,我认为传递视图控制器以传输其数据并不是一个好主意。我倾向于将最少的知识暴露给另一个对象。
例如,假设您有两个视图控制器controllerA和controllerB.
controllerAto传递一些数据controllerB,则传递数据,可能是 a NSData、 a NSArray、 aNSDictionary或您的自定义数据结构。您不应将整体controllerA作为参数传递给controllerB. 虽然你可以使用controllerA.datagetter来访问数据,但是你暴露了太多关于controllerAto的知识controllerB,这可能会因为增加和之间的耦合controllerA而在不知不觉中破坏你的设计controllerB。 -presentViewController:animated:completion:来呈现模态视图,或者将其推送到导航控制器中,或者您可能想要获取对其view属性的引用并自定义您自己的 UI 呈现。