2

私はiOS 5シングルトンにやや慣れておらず、ここに記載されているシングルトンを使用しています:

iOS 5 シングルトン

このようなもの:

MyManager.h

#import <Foundation/Foundation.h>
@interface MyManager : NSObject

//Data for section 1
@property(nonatomic,copy) NSString * section1a;
@property(nonatomic, assign) NSUInteger section1b;


//Data for section 2
@property(nonatomic,copy) NSString * section2a;
@property(nonatomic, assign) NSUInteger section2b;

+ (id)sharedInstance;
@end

MyManager.m

@implementation MyManager
@synthesize section1a, section1b, section2a; , section2b;

+ (id)sharedInstance
{
    static dispatch_once_t pred = 0;
    __strong static id _sharedObject = nil;
    dispatch_once(&pred, ^{
        _sharedObject = [[self alloc] init]; // or some other init method
    });
    return _sharedObject;
}
@end

だから私は次のようにそれを使用します:

MyManager * myManager = [MyManager sharedInstance];
myManager.data = self.data

これは、一般的にシングルトンを使用する方法ですか?何か不足していますか?基本的な質問で申し訳ありませんが、正しく行っていることを確認したいだけです。

ありがとう

4

4 に答える 4

1

alloc/init メソッドを使用してこのクラスの複数のインスタンスを作成できるため、これはシングルトンではありません。正解はこちら

于 2012-07-19T15:45:50.160 に答える
1

あなたはそれを正しくやっています。これは(現在:)進むべき道であり、ARCが有効になっている、複数のスレッドなどで正常に動作します.

クラスのインスタンスをさらに割り当てることができるため、厳密にはシングルトンではありませんが、それはあなたの場合には関係ないと思います。

于 2012-07-19T15:55:42.933 に答える
0

私は通常、シングルトンをそのように作成します(マネージャー用のシングルトンを作成するとします):

static (Manager *) instance;

+ (Manager *) getInstance
{
    if(!instance) instance = [[Manager alloc] init];
    return instance;
}

これは非常に基本的なシングルトンですが (マルチスレッドやその他の高度な機能は考慮されていません)、これが基本的な形式です。

于 2012-07-19T15:46:34.563 に答える
0

これを参照してください: iOS 5 のシングルトン? 不正なコードが新しいインスタンスを作成するのを防ぐために、allowWithZone をオーバーライドする必要があります。

于 2012-07-31T19:53:37.950 に答える