gpt4 book ai didi

iphone - 替代 Objective-C 中的 Singleton 以获得更好的应用程序设计

转载 作者:IT王子 更新时间:2023-10-29 08:12:57 25 4
gpt4 key购买 nike

现在似乎很多 Objective-C 代码都在使用 Singleton。

虽然很多人提示 Singleton,例如谷歌(Where Have All the Singletons Gone?),他们的工程师同事们也使用它:http://code.google.com/mobile/analytics/docs/iphone/

我知道我们已经在 Stack Overflow 中找到了一些答案,但它们并不完全特定于作为动态语言的 Objective-C:Objective C 有类别,而许多其他语言没有。

那你怎么看呢?你还在用单例吗?如果是这样,您如何使您的应用程序更具可测试性?

已更新:我认为我们需要以代码为例进行更具体的讨论,SO的很多讨论都是基于理论的,没有一行代码

让我们以 Google Analytics iOS SDK 为例:

// Initialization
[[GANTracker sharedTracker] startTrackerWithAccountID:@"UA-0000000-1"
dispatchPeriod:kGANDispatchPeriodSec
delegate:nil];
// Track page view
[[GANTracker sharedTracker] trackPageview:@"/app_entry_point"
withError:&error];

上面代码的美妙之处在于,一旦您使用方法“startTrackerWithAccountID”进行了初始化,您就可以在整个应用程序中运行方法“trackPageview”,而无需通过配置.

如果觉得Singleton不好,可以改进上面的代码吗?

非常感谢您的意见,祝您周五愉快。

最佳答案

这篇文章很可能是反对投票的诱饵,但我真的不明白为什么单例得不到爱。它们非常有效,您只需要了解它们的用途即可。

在 iOS 开发中,您只有一个应用程序实例。你只是一个应用程序,对吧?你不是两个或零个应用程序,是吗?因此,该框架为您提供了一个 UIApplication 单例,通过它可以获得应用程序级别的操作系统和框架功能。它适本地对某些东西进行建模以使其成为单例。

如果您的数据字段可以而且应该只有一个,并且您需要从应用程序的各个位置访问它们,那么将其建模为单例也完全没有错。将单例创建为全局桶可能是对该模式的误用,我认为这可能是大多数人反对的原因。但是,如果您正在对具有“单一性”的事物建模,那么单例可能是最佳选择。

一些开发人员似乎从根本上厌恶单例,但当真正被问及原因时,他们含糊其辞地谈论全局变量、命名空间和美学。我想我可以理解,如果你真的一劳永逸地解决了单例是一种反模式并且在所有情况下都被憎恶的问题。但那时你不再思考了。框架设计不同意你。

关于iphone - 替代 Objective-C 中的 Singleton 以获得更好的应用程序设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5912541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com