通常,只要可以运行,我会以任何随机方式将其组合在一起,但这意味着我不会关注任何设计模式。我的应用程序当前广泛使用全局变量(我在每个 View Controller 中携带AppDelegate
的实例来访问在AppDelegate.h
中声明的属性)。尽管它可以实现我想要的功能,但我已经读过这不是一个好的设计实践。
因此,我想开始制作我的代码“legit”。但是,我现在无法想象没有全局变量的应用程序。它们对应用程序的健康至关重要,但这必须表示我做错了,对吧?我简直无法想象我还会怎么做。以这个为例:
您在这里有两个 View Controller ,SideViewController
和MainViewController
。使用全局变量,例如说整个应用程序是否有一个SideViewController
和MainViewController
共享实例(appDelegate.sideViewController
和appDelegate.mainViewController
),我可以轻松地在两个 View Controller 之间进行通信,这样,如果我在SideViewController
中按“News Feed”,就可以告诉我的MainViewController
重新加载它的 View 。
但是,我无法想象,如果这些不是全局变量,将如何进行呢?如果SideViewController
中发生事件,我该如何以符合设计标准的方式通知MainViewController
?
最佳答案
现在,您以相同的方式进行操作,只是SideViewController从不同的地方获取了对MainViewController的引用。
这两个 View Controller 是如何创建的?它很可能以两种方式之一发生:
在第一种情况下,MainViewController创建后便会立即引用SideViewController。它可以将该引用存储在其自己的实例变量之一中,以便始终可以向其创建的SideViewController发送消息。类似地,MainViewController可以给SideViewController自己一个引用(即对MainViewController的引用),SideViewController可以存储该引用并在将来与它的MainViewController进行通信。
第二种情况是相似的-如果应用程序委托(delegate)(或其他一些对象)同时创建MainViewController和SideViewController,则该对象会知道这两个对象,并且可以使用彼此的引用进行配置。
在这两种情况下,所讨论的对象都能够像以前一样轻松地相互通信,并且不需要全局变量。
上面我已经解释了,也许是完成您所要求的最简单的方法-两个对象之间的通信。有多种模式可用于改善这些对象之间的关系,以使您的代码更好:
如果您有兴趣,您可能想获取一份Erik Buck的 cocoa 设计模式的副本,其中详细解释了这些模式以及许多其他模式。不要觉得您必须一次学习所有内容,否则就麻烦太多了。一次学习一点,看看它如何改善(或不改善)您的项目。