tôi thấy chủ đề an toàn phiên bảnLàm thế nào để thực hiện đúng cách tương thích ARC và `cấp phát init` an toàn Singleton lớp học?
+(MyClass *)singleton {
static dispatch_once_t pred;
static MyClass *shared = nil;
dispatch_once(&pred, ^{
shared = [[MyClass alloc] init];
});
return shared;
}
nhưng những gì sẽ xảy ra nếu ai đó chỉ gọi [MyClass alloc] init]
? Làm thế nào để làm cho nó trở lại cùng một ví dụ như phương pháp +(MyClass *)singleton
?
bạn đã làm một dispatch_once(), có cần phải làm gì nếu (! SingletonInstance)? Tôi tin rằng dispatch_once() sẽ xử lý điều đó cho chúng tôi trên những thứ khác như đồng bộ hóa. – pnizzle
@pnizzle bạn đúng, dispatch_once sẽ là đủ, kiểm tra các ví dụ trước khi có thể được nhanh hơn mặc dù. –
Có phải 'allocWithZone:' không được chấp nhận? Có vẻ như khi tôi cố gắng thực hiện nó. – Fogh