Верен ли класс Singleton NetworkManager в примере Apple MVCNetworking?

Вот ссылка на пример кода http://developer.apple.com/library/ios/#samplecode/MVCNetworking/Introduction/Intro.html

Ниже приведен фрагмент кода из файла NetworkManager.m

+ (NetworkManager *)sharedManager
// See comment in header.
{
    static NetworkManager * sNetworkManager;

    // This can be called on any thread, so we synchronise.  We only do this in 
    // the sNetworkManager case because, once sNetworkManager goes non-nil, it can 
    // never go nil again.

    if (sNetworkManager == nil) {
        @synchronized (self) {
            sNetworkManager = [[NetworkManager alloc] init];
            assert(sNetworkManager != nil);
        }
    }
    return sNetworkManager;
}

Очевидно, здесь есть проблемы с потокобезопасностью. Два экземпляра NetworkManager могут быть созданы, когда существует более одного потока. Значит, Apple допустила ошибку, верно?

5
задан Bob Cromwell 23 April 2012 в 04:00
поделиться