0

Objective Cでシングルトンデザインパターンを実装しようとしています.これが私のコードです

.h ファイル内

#import <Foundation/Foundation.h>
@interface BSCustomClass : NSObject
{
    NSString *string;
}
@property (nonatomic,strong)NSString *string;
@end 

.m ファイル内

#import "BSCustomClass.h"
@implementation BSCustomClass
static int i;
static BSCustomClass* object;
@synthesize string;
-(id)init
{
    if(i==0)
    {
        object=[super init];
        i=1;
        object.string=@"tunvir Rahman";       
    }
    return object;
}
@end

alloc と init を使用してメインから BSCustomClass のオブジェクトを作成する場合は、独自の init メソッドを呼び出し、静的変数 i をチェックします。i=0 の場合、これまでオブジェクトが作成されていないと見なされてオブジェクトが作成され、その後、クラス BSCustomClass のすべてのオブジェクトの前のオブジェクトのアドレスが返されます。これはシングルトンの正しい実装ですか?? ありがとう

4

2 に答える 2

4

dispatch_oncealloc-init の代わりstatic intに、「singleton」や「sharedInstance」などのクラス メソッドを使用する必要があります。より詳細な説明については、「Singletons: You're doing them wrong」を参照してください。その投稿のコード

+(MyClass *)singleton {
    static dispatch_once_t pred;
    static MyClass *shared = nil;

    dispatch_once(&pred, ^{
        shared = [[MyClass alloc] init];
    });
    return shared;
}
于 2013-04-19T10:06:14.237 に答える
0

Objective-C のシングルトンは次のように実装されます。

+(id)sharedInstance {
    static id instance = NULL;
    if (instance == NULL) instance = [[YourClassName alloc] init];
    return instance;
}

複数のスレッドから呼び出される可能性がある場合は、代わりに David のソリューションを使用してください。

于 2013-04-19T10:09:09.187 に答える