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