Cocoa单例和共享实例

时间:2016-07-20 07:12:15

标签: ios objective-c swift

为什么Apple没有将其类作为纯单例,例如,即使UIApplication类允许您访问UIApplication单例,例如:

UIApplication *sharedApplication = [UIApplication sharedApplication];

没有什么能阻止您显式实例化UIApplication实例,例如:

UIApplication *newApplication = [[UIApplication alloc] init];

然而,结果是运行时异常。该例外清楚地表明,任何时候只有一个UIApplication类的实例可以存活。

那么为什么不通过在默认初始值设定项中返回相同的实例来获得纯单例?

我问这个问题要清楚,在我的项目上创建单身时,要遵循哪种方式更好。

2 个答案:

答案 0 :(得分:1)

首先,你是对的:Apple称之为单身人士既不是广泛接受的定义中的真正单身人士,也不是Apple's definition

  

[...]而对于单例类,每个进程只能有一个类的实例

但是,在Swift中实现共享实例非常容易:

class SomeManager {
  static let sharedInstance = SomeManager()
}

在Objective-C中,这两种方法(单例和共享实例)都是可实现的,但共享实例更容易再次实现。

另一方面,使用共享实例模式没有缺点。你应该遵循它。

BTW:在所有共享实例中都没有异常。有些类允许你分配第二个实例,这类似于非法。

答案 1 :(得分:0)

  

这是Apple制定的标准,我们的开发人员也会遵循制作应用程序的标准。

简而言之,Apple选择不将他们的课程作为单身人士作为设计选择。而且,再次关于UIApplication的运行时异常,每个应用程序只给出一个UIApplication实例。

  

您无法创建自己的UIApplication并按照自己的意愿行事。它违反了规则。

但是,我们作为开发人员可以随时在我们的应用程序中创建和使用单例。并且,Apple也没有关注我们这样做。

重要的是您用于开发应用程序的设计选择! Apple有自己的方式,我们有自己的方式!并且,只要它的工作,每个人都很高兴!

  

至于正确的方式,那就是不存在。你随着时间的推移创造了方式。

Apple根据其开发人员的经验选择了这种模式,并且在特定时间寻求成为最佳选择。而且,直到今天仍然如此。说它有一天会破裂,那么Apple会乐意改变它们的标准。

而且,至于您关于遵循哪种标准或模式的最后一个问题,您可以按照您认为最舒适的方式进行操作。这是你的设计选择!

亲切的问候,
Suman Adhikari