相当早在我的应用程序中,当我的经验比现在少得多时,我想使用自己的自定义动画为 View Controller 之间的过渡添加一些趣味性。不知道从哪里开始,我到处寻找SO,就像MVC这样的模式,几乎可以在任何时间从任何 Controller 对其进行访问,事实证明,单例是可行的方法。

我没有意识到的是,似乎对单例模式产生了强烈而坚决的仇恨,而我本人也开始明白为什么,但这已不重要了。

因此,过了一会儿,我决定将我的相同实现移到UINavigationController上的一个类别中(毕竟,它可以处理转换!),保留原始类以进行比较,并且想知道哪种方法最有效。在对这两种实现进行了彻底的测试之后,我可以毫无疑问地说它们在各个方面都是平等的,包括速度,准确性,平滑度,帧速率,内存使用率等。因此,从总体可维护性的角度来看,哪种方法“更好”?

编辑:在阅读了大家都写的井井有条的论据后,我决定使用单例。 @JustinXXVII提出了最有说服力的论据(IMHO),尽管我认为这里的每个答案同样值得。谢谢大家的意见,我已对问题中的所有答案进行了投票。

最佳答案

我将以单例对象为例。在UIKitiOS上都使用了单例。您不能对类别做的一件事就是添加实例变量。这有两件事:

  • MVC工作流程无法容忍具有其他对象的熟悉知识的对象
  • 有时您只需要一个地方来引用一个并不真正属于其他任何地方的对象

  • 这些事情相互抵触,但是能够保留一个实际上没有“所有者”的实例变量的附加功能就是为什么我偏向于单例。

    通常,我所有的XCode项目中都有一个单例类,该类用于存储“全局”对象并执行一些我不想给AppDelegate造成负担的普通事情。

    一个示例是序列化/归档对象和取消归档/还原。我必须在几个类中使用相同的方法,我不想使用一些序列化方法来扩展UIViewController来写入和读取任意文件。也许这只是我个人的喜好。

    我可能还需要一种快速的方法来在NSUserDefaults中查找信息,但又不想一直在写[[NSUserDefaults standardUserDefaults]stringForKey:@"blah"],因此我将在我的单例中声明一个使用字符串参数的方法。

    到现在为止,我还没有真正考虑将类别用于这些东西。可以肯定的是,当我只有一个事件的物体会粘在身上并且会照顾我的东西时,我宁愿不实例化一个新的对象以完成相同的任务一百次。 (不增加AppDelegate的负担)

    关于objective-c - 选择单例还是分类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9596092/

    10-15 04:29