Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 是否有更好的方法从托管视图控制器调用托管视图控制器中的方法?_Ios_Objective C_Cocoa Touch_Uiviewcontroller - Fatal编程技术网

Ios 是否有更好的方法从托管视图控制器调用托管视图控制器中的方法?

Ios 是否有更好的方法从托管视图控制器调用托管视图控制器中的方法?,ios,objective-c,cocoa-touch,uiviewcontroller,Ios,Objective C,Cocoa Touch,Uiviewcontroller,到目前为止,在我开发的应用程序中,我一直有一个UIViewController负责显示其他UIViewControllers以在UI中显示转换。每当我在“管理”视图控制器中调用“管理”视图控制器中的方法时,我必须确保在管理控制器中有对管理控制器的引用 例如: 如果我有一个名为MainController的UIViewController,负责管理我的应用程序UI中的其他UIViewController,并且MainController为演示创建2个控制器。分别调用了subcroller1和sub

到目前为止,在我开发的应用程序中,我一直有一个
UIViewController
负责显示其他
UIViewController
s以在UI中显示转换。每当我在“管理”视图控制器中调用“管理”视图控制器中的方法时,我必须确保在管理控制器中有对管理控制器的引用

例如: 如果我有一个名为
MainController
UIViewController
,负责管理我的应用程序UI中的其他
UIViewController
,并且
MainController
为演示创建2个控制器。分别调用了
subcroller1
subcroller2
。如果
subcroller1
完成并且
MainController
需要显示
subcroller2
,我总是在
subcroller1
内部设置一个
maincontroller2
参考变量,以便它可以将更改传达给
MainController
。这意味着每当
MainController
创建
subcroller1
时,必须将
subcroller1
MainController
参考变量设置为
self


我应该担心这种通信方式的内存使用情况吗?对这种行为使用通知会更好吗?我发现我现在使用的方法的主要好处是,如果必要的话,在视图控制器之间共享信息非常容易。任何想法都是值得赞赏的。

在其他视图中处理更改、操作或用户交互是的基本用例。最佳做法是让主控制器成为第一/第二视图控制器的代理,然后当子控制器中发生事件时,它们对其代理调用某些方法,然后代理可以采取任何必要的操作

按照您描述的方式传递引用不会对内存产生明显的影响,但是它会将您的代码紧密地耦合到
MainController
,这是应该避免的。您应该争取灵活性,以处理未来可能发生的变化。如果你过渡到一个通用的应用程序,而iPad用户界面的结构却大不相同,会发生什么?对于委托,您只需要确保控制器之间的契约完好无损,但可以自由更改任何底层实现细节

在视图之间保持值/状态同步的其他选项包括:

  • -最好用于数据
  • -最好用于数据
  • NSNotification
    s发送-最适合用于操作

使用customDelegate或NSNotificationSceneter