3

我的问题可能很愚蠢,但我无法理解。我使用此代码创建了一个单例类。

+ (GameRequestHandler *) sharedInstance
{
    static dispatch_once_t pred;
    static GameRequestHandler *shared = nil;

    dispatch_once(&pred, ^{
        shared = [[GameRequestHandler alloc] init];
    });
    return shared;
}

当我从这个单例对象调用方法时,它们是在主线程还是在后台线程中调用的?

4

2 回答 2

7

这些方法在您调用它们的线程上调用。

dispatch_once只是确保传递给它的块在应用程序的生命周期中只执行一次。我不认为它使用线程,如果是这样,那是你不需要担心的实现细节。

于 2012-05-18T10:44:59.450 回答
0

如果您需要在主线程上调用,请使用它;

dispatch_once(&pred, ^{
        dispatch_async(dispatch_get_main_queue(), ^{
                    shared = [[GameRequestHandler alloc] init];
        });
    });
于 2017-04-08T08:12:47.537 回答