关于 Cocoa Touch 中单例的问题

Posted

技术标签:

【中文标题】关于 Cocoa Touch 中单例的问题【英文标题】:Question about singletons in Cocoa Touch 【发布时间】:2011-07-15 16:58:57 【问题描述】:

我对 OOP 和设计模式还很陌生,但我之前实现过一次单例模式,用于在不同的 ViewController 之间传递静态数组和字符串对象。

我想知道是否有一种简单的方法可以让我的所有 ViewController 监听手势或事件,然后在所述手势/事件发生后执行一些代码。我正在考虑使用UIGestureRecognizer 对象或UIResponder 类的motionBegan 方法。

我已经通过创建一个新的UIWindow 类、将代码放入其中并将MainWindow.xib 的类更改为我的自定义类来完成这项工作。这可行,并且是一个不错的解决方案,但我仍然想知道是否有非 IB 方式来实现此解决方案(例如,单例)

提前感谢您的指导。

非常感谢示例代码!

【问题讨论】:

【参考方案1】:

你继承了 UIWindow?这是非常罕见的。阅读有关 UIApplication 委托对象和一般委托模式的信息。它基本上是您应用在 Cocoa 中的主要单例。

如果您不想传递它,您可以随时通过调用来检索应用程序的委托

[[UIApplication sharedApplication] delegate]

【讨论】:

你绝对不想继承UIWindow - 甚至作为初学者使用它,设置窗口的根控制器并完成它 我会调查一下 - 我在想我想做的事情是不可能的,除了继承 UIWindow,或者只是放弃这个功能的实现。谢谢! 另一个想法:您应该阅读有关 UIResponder 和响应者链的信息:this question 可能是一种有用的方法。【参考方案2】:

如果您希望多个未连接的对象/控制器收到单个事件的通知,您可以随意触发它(来自控件或手势识别器的目标/动作)。

您可能想查看NSNotificationCenterNSNotification,您可以列出多个对象以通知事件/更改。

【讨论】:

是否可以在不向现有应用程序添加太多代码的情况下做到这一点?我编写了一个在抖动事件上触发的错误报告器,我将其存储在子类 UIWindow 对象中。我现在要做的就是在 Interface Builder 中建立一个连接以访问这个新窗口,并且可以使用抖动事件代码。我是这样做的,因此我可以毫不费力地将代码恢复为非调试模式(将连接更改回 UIWindow)。

以上是关于关于 Cocoa Touch 中单例的问题的主要内容,如果未能解决你的问题,请参考以下文章

Cocos Creator游戏开发中单例的实现

java中单例和多例的区别

关于 Swift 单例的例子

关于python单例的常用几种实现方法

《从零开始学Swift》学习笔记(Day 63)——Cocoa Touch设计模式及应用之单例模式

关于java中无法实现真正单例的论证