1

Objective-C の Singleton の概念を理解しようとしています。

私が見つけたほとんどの例は、単一の変数を参照しているだけです。

x、y、zを返す加速度計の値の例に従って、多くの変数を処理するように例を適応させる方法について少し迷っています。

もう少し詳しく教えていただけますか?

4

1 に答える 1

4

Singletonは、アプリケーションの存続期間内に一度だけ存在できる特別なオブジェクトを指します。そのオブジェクトは、必要な数の変数とプロパティを持つことができます。

//  Singleton.h

@interface Singleton : NSObject

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

+ (Singleton *)sharedInstance;

@end

シングルトンの鍵は、一度しか作成できないことです。通常、Objective-C では@synchronized()ディレクティブを使用して、一度だけ作成されるようにします。これを便利なクラス メソッドに入れ、 SingletonsharedInstanceを返します。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

これはSingletonを作成する唯一の方法ではありません。重要な部分は、一度しか作成できないことです。そのため、OSX やdispatch_once.

シングルトンと話す

したがって、 Singletonと通信する別のオブジェクトが別の場所にあるとしましょう。これはどこでも実行できます#import "Singleton.h"

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

    // Reading properties
    int valueB = [[Singleton sharedInstance] propertyB];
}
于 2013-01-18T20:02:02.510 に答える