关于 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】:
如果您希望多个未连接的对象/控制器收到单个事件的通知,您可以随意触发它(来自控件或手势识别器的目标/动作)。
您可能想查看NSNotificationCenter
和NSNotification
,您可以列出多个对象以通知事件/更改。
【讨论】:
是否可以在不向现有应用程序添加太多代码的情况下做到这一点?我编写了一个在抖动事件上触发的错误报告器,我将其存储在子类 UIWindow 对象中。我现在要做的就是在 Interface Builder 中建立一个连接以访问这个新窗口,并且可以使用抖动事件代码。我是这样做的,因此我可以毫不费力地将代码恢复为非调试模式(将连接更改回 UIWindow)。以上是关于关于 Cocoa Touch 中单例的问题的主要内容,如果未能解决你的问题,请参考以下文章