cocoa单身人士和共享实例
为什么苹果没有他们的类作为纯单例,例如,即使UIApplication类可以访问UIApplication单例,如:
UIApplication *sharedApplication = [UIApplication sharedApplication];
没有什么能阻止你明确地实例化一个UIApplication实例,如:
UIApplication *newApplication = [[UIApplication alloc] init];
但是,结果是运行时exception。 例外情况清楚地表明,在任何时候只有一个UIApplication类的实例可以存在。
那么为什么不通过在默认的初始化器中返回相同的实例来获得纯粹的单例呢?
我问这个问题要清楚,在我的项目上创build单例时,要遵循哪种方式更好。
首先你是对的:苹果公司称之为单身人士既不是广为接受的定义,也不是苹果公司定义中的真正单身人士。
而对于单例类,每个进程只能有一个类的实例
但是,在Swift中实现一个共享实例是非常容易的:
class SomeManager { static let sharedInstance = SomeManager() }
在Objective-C中,两种方法(单例和共享实例)都是可实现的,但共享实例更容易实现。
另一方面,使用共享实例模式没有缺点。 你应该遵守它。
顺便说一句:在共享实例的所有情况下,您都不会遇到exception。 有些课程可以让你分配第二个实例,类似的是非法的。
这是苹果公司制定的一个标准,我们的开发者也会遵循制定应用程序。
简而言之,苹果公司已经select不把他们的课程作为单身人士作为deviseselect。 而且,再次涉及到针对UIApplication的运行时exception,每个应用程序只有一个UIApplication实例。
你只是不能创build自己的UIApplication,只要你喜欢。 它打破了规则。
但是,我们作为开发人员可以随时在我们的应用程序中创build和使用单例。 而且,苹果也不同意我们这样做。
重要的是你使用什么deviseselect来开发应用程序! 苹果有他们的方式,我们有我们的方式! 而且,只要工作,大家都快乐!
至于正确的方式,那根本不存在。 随着你走,你创造了方式。
苹果因为开发人员的经验而select了这种模式,并且在当时希望成为最好的select。 而且,直到今天一直很好。 说有一天它会中断,然后苹果会高兴地改变他们的标准。
而且,关于您最后一个要遵循的标准或模式的问题,您可以按照您感觉最舒服的方式进行操作。 这是您的deviseselect!
亲切的问候,
苏曼阿迪卡里