这更像是一个设计最佳实践问题:
当你设计结构时,让我们说一个基于位置的应用程序。位置管理器显然是一个重要的实例,应该可以轻松访问其他对象。
你应该将它作为appDelegate的属性吗?或者单身一个单身?
在什么情况下你更喜欢一个?
我知道两者都有效,但我想确保我能以正确的方式做事,而不仅仅是将所有事情混为一谈。
非常感谢您的投入!
答案 0 :(得分:2)
答案 1 :(得分:2)
最糟糕的选择IMO是将内容存储在app delegate中。有关详细信息,请参阅What describes the Application Delegate best? How does it fit into the whole concept?。简而言之,app delegate是Application Delegate。它不是全球事物的应用倾销场所。"
单身人士是ObjC中一种历史悠久的方法,通过shared...
模式。经过几十年的流行,并在核心Cocoa框架中广泛使用(NSUserDefaults
,NSNotificationCenter
,NSApplication
,NSFontManager
,NSWorkspace
,UIDevice
,近年来,他们对其他技术有所忽视,尤其是依赖注入,"依赖注入等等。这只是说"分配给一个财产。"
在ObjC中使用单身人士多年后,我开始研究DI的思维方式。可测试性的改进和依赖性的改进清晰度非常好。也就是说,有时DI会导致尴尬的过渡,特别是在处理故事板时。
所以,我会说:
(MyAppDelegate *)[[UIApplication sharedApplication] delegate]
,那么您就是在做错事。答案 2 :(得分:1)
为位置管理制作另一个单身人士。 Single responsibility是SOLID的第一原则。
答案 3 :(得分:0)
想想你在AppDelegate中真的需要它吗?
对于位置管理器,例如,不,不。你最好将位置管理器及其所有相关方法保存在一个单独的类中,以保持奇异性原则,如@vladimir所说,并且能够在以后重用它。
AppDelegate负责处理应用启动和/或进入后台时发生的情况,初始化核心数据,注册推送通知以及其他第三方库,如解析,......
向appDelegate添加其他内容会使其随着时间的推移而变大,维护起来会非常困难。
何时添加不属于AppDelegate的内容?我认为当应用程序很小时,你知道它不会扩展,并且你需要在清洁代码上花时间。
通过Matt检查AppDelegate responsibilities和answer
答案 4 :(得分:0)
您可以创建CLLocationManager
的多个实例,并在需要时使用它们。
如果您创建一个实例并尝试共享它,那么您将难以转发周围的委托方法,或者尝试将它们重新实现为通知而导致混乱。