【问题标题】:trying to understand the Singleton concept in objective-c with many variables试图理解具有许多变量的objective-c中的Singleton概念
【发布时间】:2013-01-18 19:48:49
【问题描述】:

我正在尝试理解 Objective-c 中的 Singleton 概念。

我发现的大多数示例只涉及一个变量。

对于如何调整示例以处理许多变量,例如返回 x、y、z 的加速度计值,我有点迷茫。

你能再指导我一点吗?

【问题讨论】:

  • 而不是一个变量使用 3....

标签: objective-c oop design-patterns singleton


【解决方案1】:

Singleton 是指在应用程序的生命周期内只能存在一次的特殊对象。该对象可以根据需要拥有尽可能多的变量和属性。

//  Singleton.h

@interface Singleton : NSObject

@property (readwrite) int propertyA;
@property (readwrite) int propertyB;
@property (readwrite) int propertyC;

+ (Singleton *)sharedInstance;

@end

单例的关键是它只能被创建一次。通常在 Objective-C 中我们使用@synchronized() 指令来确保它只被创建一次。我们将其放入名为sharedInstance 的便利类方法中并返回我们的Singleton。由于 Singleton 只是一个对象,它可以很容易地拥有多个属性、变量和方法。

// Singleton.m

#import "Singleton.h"

@interface Singleton ()
{
    int variableA;
    int variableB;
    int variableC;
}
@end

@implementation Singleton

static Singleton *sharedInstance = nil;

+ (Singleton *)sharedInstance
{
    @synchronized(self) {
        if (sharedInstance == nil) {
            sharedInstance = [[Singleton alloc] init];
        }
    }
    return sharedInstance;
}

+ (id)allocWithZone:(NSZone *)zone {
    @synchronized(self) {
        if (sharedInstance == nil) {
            sharedInstance = [super allocWithZone:zone];
            return sharedInstance;
        }
    }
    return nil;
}

- (id)init {
    self = [super init];
    if (self) {
        // Inits
    }
    return self;
}

@end

这不是创建单例的唯一方法。请记住,重要的部分是它只能创建一次。因此,在为 OSX 和 iOS 开发时,您可以利用更新的 Grand Central Dispatch 调用,例如 dispatch_once

与单身人士交谈

假设您在其他地方有另一个对象与 Singleton 对话。这可以在您#import "Singleton.h"的任何地方完成

- (void)someMethod
{
    // Setting properties
    int valueA = 5;
    [[Singleton sharedInstance] setPropertyA:valueA];

    // Reading properties
    int valueB = [[Singleton sharedInstance] propertyB];
}

【讨论】:

  • 嗨,谢谢。我不明白的最后一件事是如何为 a、b 或 c 赋值,以及如何从 a、b 或 c 中获取值。谢谢雷吉斯
  • 我添加了一些内容来向您展示如何访问属性。变量只是内部变量,不能在单例之外赋值。
  • 我建议查看这个关于基本 Objective-C 编程的教程 :) 它会有所帮助。 raywenderlich.com/21320/…
  • 很高兴我能帮上忙 :) 快乐编码。
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 2019-02-10
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多