サンプルコードへのリンクは次のとおりです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;
}
明らかに、ここにはスレッドセーフの問題があります。複数のスレッドがある場合、2つのNetworkManagerインスタンスが作成されることがあります。それでAppleは間違いを犯しましたよね?