Re: Is Apple's singleton sample code correct?
Re: Is Apple's singleton sample code correct?
- Subject: Re: Is Apple's singleton sample code correct?
- From: Shawn Erickson <email@hidden>
- Date: Sat, 26 Nov 2005 09:19:15 -0800
On Nov 26, 2005, at 9:02 AM, Uli Kusterer wrote:
Am 26.11.2005 um 16:00 schrieb Jim Correia:
On Nov 26, 2005, at 8:28 AM, Uli Kusterer wrote:
Am 26.11.2005 um 04:50 schrieb David Gimeno Gost:
+ (id) allocWithZone: (NSZone*) zone
{
@synchronized( self ) {
if ( sharedInstance == nil ) {
sharedInstance = [super allocWithZone: zone];
} else {
[sharedInstance retain];
}
}
return sharedInstance;
}
Errm ... good start, but you meant to be @synchronized() on some
other object. If you synchronize to self, two threads create a
"self", and both sync to their own "self"s, so you effectively
get the same result as if you didn't have the @synchronized call
in there at all. You need an explicit NSLock here, or one shared
object that you know you can rely on already existing.
self here is the class object, which already exists, and is global.
Ah, right. Sneaky little "+" sign. :-D
But isn't that dangerous? That would mean that calling alloc/init
on such an object would repeatedly call init on the same object :-(
I think the assumption was that the init method would check if it was
already initialized. In other words the init method would deal with
multiple init calls to the singleton.
-Shawn
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden