ios - 在这种情况下我应该避免单例吗?

标签 ios iphone objective-c

我一直在考虑在我当前应用程序的数据类中使用单例。我也一直在考虑不使用该模式的原因,目前我被困在中间。

在这种情况下,我支持单例的原因是由于方法和属性的可访问性很容易,我需要在整个应用程序中多次使用这些方法和属性。我可以为此使用 appDelegate,但这混淆了关注的领域,因为这些方法/变量与应用程序状态无关——更多的是与用户输入有关。数据最终将与 NSUserDefaults 一起保存——这已经是一个单例了。

我反对它的原因是因为它是一个已经是 bass 应用程序的另一个单例(appDelegate)

我的问题:

使用另一个 Singleton 来访问数据模型是否是正确的/可接受的方式 - 或者我应该看看另一种方法?

我个人认为单例作为数据模型没有任何问题——在应用程序启动时使用应用程序委托(delegate)来实例化它,然后在整个应用程序中需要它们时访问它的各种方法/属性。这将是应用程序中唯一的其他单例(可能是另一个用于用户管理的单例 - 例如;登录/注销/配置文件/凭据等?)

有什么想法吗?

谢谢大家!

最佳答案

在 ios 中有多个单例类没有问题,事实上在我的许多项目中,大多数类都是单例。通常我在单例中具有数据访问逻辑和控制,然后将实际对象类作为实例。

正如您已经确定的那样,您真的不想将不适用于整个应用程序的内容放入 AppDelegate。

从我的角度来看,不要从 AppDelegate 中实例化类,只需让类在首次访问时实例化自身即可。

每当我向人们解释单例 Objective-C 时,我总是引导他们访问这个站点,这对您来说可能值得一看:

http://www.galloway.me.uk/tutorials/singleton-classes/

它以非常容易理解的方式只解释了您需要的内容。执行“自实例化”的是这一点:

+ (id)sharedManager {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}

关于ios - 在这种情况下我应该避免单例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20990429/

相关文章:

ios - 在 iOS 中播放带有 Alpha channel 的视频?

ios - 如何将 CVPixelBuffer 转换为 UIImage?

ios - 在 UINavigationController 中支持纵向和横向 View 的最佳实践

css - 如何使用 CSS 设置 NSString 的样式?

ios - Backendless + Realm - 存储数组

iphone - CGAffineTransform问题

iphone - 在 iPhone 中显示格式化字符串中小数点后两位数的浮点值

ios - 从 Objective-C 转换为 Swift (TestFlight)

objective-c - Cocoa 中仅使用 OpenGL 渲染第一帧

ios - 如何使用正确的分辨率图像填充 UITableViewCell?