Dưới đây là liên kết tới các mẫu mã http://developer.apple.com/library/ios/#samplecode/MVCNetworking/Introduction/Intro.htmlSingleton Class NetworkManager trong MVCNetworking của Apple có đúng không?
Dưới đây là đoạn mã từ tập tin 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;
}
Rõ ràng là có chủ đề vấn đề an toàn ở đây. Hai phiên bản NetworkManager có thể được tạo khi có nhiều hơn một luồng. Vì vậy, Apple đã phạm sai lầm, phải không?
"Rõ ràng hai sNetworkManager có thể được tạo ra. Vì vậy, Apple đã thực hiện một sai lầm, phải không?" Tại sao? –
Xin hãy xem câu trả lời của Kurt. –