iOS:按需获取对单例的引用还是保留它更好?

标签 ios reference singleton

在我的 iOS 应用程序中,我有一组单例对象,它们是在应用程序启动时由我的应用程序委托(delegate)创建的,它们应该可以从应用程序的每个 View Controller 访问。这些对象存储为应用委托(delegate)属性。

我想知道每次需要时获取对这些对象的引用是否更好([SharedAppDelegate.singletonName 方法]),还是为每个需要的 View Controller 存储私有(private)引用更好对象?

也许需要根据我访问该对象的次数进行权衡?或者我只是想得太多了,实际上没有什么区别?

提前致谢。

最佳答案

为什么将引用存储在应用程序委托(delegate)中,而不是在单例对象本身的静态变量中——这是常见的做法?

如果您担心性能问题,因为您在单例 init 中初始化了很多对象,请在需要数据时进行惰性初始化。

在应用委托(delegate)中存储一个对象并不是真正的单例。例如,您可以使用 GCD 创建单例。

@interface MYSingleton

+ (id)sharedInstance;

@end

@implementation MYSingleton

+ (id)sharedInstance {
  static dispatch_once_t once;
  static MyFoo *sharedInstance;
  dispatch_once(&once, ^{
    sharedInstance = [[self alloc] init];
  });
  return sharedInstance;
}

@end

在每个 View Controller 中创建许多不必要的访问器纯粹是矫枉过正和浪费时间。

关于iOS:按需获取对单例的引用还是保留它更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7723996/

相关文章:

visual-studio-2008 - 当我向解决方案中添加项目时,如何让 Visual Studio 自动添加引用?

c - 为什么最高的元素没有返回?

c++ - 在工厂类中使用单例 (C++)

ios - 如何从我的应用程序打开其他应用程序

ios - 如何从 ios 10 中的 FBGraphApi 结果中提取数据

c# - 冗余 "using"是否会降低性能

python - 为什么这个单例实现是 "not thread safe"?

java - 从 ArrayList 中删除元素

ios - 绘制 3D 平面

ios - 应用程序在后台停留的时间