-1

シングルトンを初期化するために、次のことを行っています。

ChatDataController *box = [ChatDataController sharedInstance];

問題は、*box をさまざまな場所で使用していることです。たとえば、これらのメソッドでは次のようになります。

- (void) viewDidAppear:(BOOL)animated
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

一度だけ初期化する必要がある方法はありますか? *box を特定のクラス内の任意のメソッドで使用できるようにするには?

4

4 に答える 4

1

このコードをChatDataController

+ (ChatDataController *)sharedInstance
{
    static ChatDataController *object = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        object = [[ChatDataController alloc] init];
    });
    return object;
}
于 2013-08-01T11:37:09.440 に答える
0

一度だけ初期化する必要がある方法はありますか?

ChatDataControllerがシングルトンの場合、一度だけ初期化できます。

[ChatDataController sharedInstance]常に同じインスタンスを返す必要がありalloc] init]、最初に呼び出されたときにのみ返されます。

コメントの1つで述べたように、すでにシングルトン[ChatDataController sharedInstance]がある場合は、共有インスタンスが必要なときに呼び出すだけです。オブジェクトへのポインタをプロパティに格納する必要はありません。

于 2013-08-01T22:56:25.120 に答える
-1

これを試してください:- .pch ファイルにマクロを作成します

最初のインポート クラス

#import"ChatDataController.h"

次に、マクロを作成します (sharedInstance はクラス メソッドである必要があります)。

#define box ([ChatDataController sharedInstance]) 

その後、すべてのクラスでこのオブジェクトを使用できます

于 2013-08-01T13:09:26.257 に答える
-1

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html

「シングルトン インスタンスの作成」

static MyGizmoClass *sharedGizmoManager = nil;

+ (MyGizmoClass*)sharedManager
{
    if (sharedGizmoManager == nil) {
        sharedGizmoManager = [[super allocWithZone:NULL] init];
    }
    return sharedGizmoManager;
}
于 2013-08-01T11:29:13.007 に答える