The only difference between your code and mine is that you haven't initialized onceToken = 0 so it has a random value.
I looked around to see if that makes a difference and didn't get much confirmation one way or another. One by Mike Ash (https://www.mikeash.com/pyblog/friday-qa-2014-06-06-secrets-of-dispatch_once.html) mentions, "Note that dispatch_once_t is just a typedef for long, initialized to zero, and with the meaning of other values left up to the implementation." It's a simple thing to change to see what happens. > On Oct 19, 2016, at 12:54 PM, Alex Zavatone <z...@mac.com> wrote: > > On Oct 19, 2016, at 2:08 PM, Steve Christensen wrote: > >> This is the model I use for singletons and I've never had the singleton >> instance deallocated out from under me. >> >> + (MyClass*) sharedThing >> { >> static dispatch_once_t sOnceToken = 0; >> static MyClass* sSharedThing = nil; >> >> dispatch_once(&sOnceToken, >> ^{ >> sSharedThing = [[MyClass alloc] init]; >> }); >> >> return sSharedThing; >> } >> > > It appears that this is what I am doing. Though the details are not the > same, should this matter? > > We have already had to patch one instance where the ref to this was getting > lost > > + (instancetype)referenceGeofenceController { > static GeofenceControllerSingleton *geofenceController; > static dispatch_once_t onceToken; > > dispatch_once(&onceToken, ^{ > geofenceController = [[self alloc] init]; > }); > return geofenceController; > } > > > Is there anything wrong with what I'm doing? should I be using > [GeofenceControllerSingleton alloc] init] instead of [[self alloc] init]? > > Thanks a million. > Alex Zavatone > >>> On Oct 19, 2016, at 11:41 AM, Alex Zavatone <z...@mac.com> wrote: >>> >>> We are running into what appears to be a case where a singleton that has >>> been created through GCD dispatch_once may be getting deallocated by the OS. >>> >>> To check and see if this is the case, I have put logging code in the >>> dealloc method, but our logs do show the init method being called twice >>> even though the method is past the dispatch_once. >>> >>> I'm interested in seeing if I can prevent the singleton from being >>> deallocated. >>> >>> I have seen on discussion where people suggest keeping a private strong >>> property in the singleton with a reference to self to prevent this from >>> happening. >>> >>> Something like >>> self.selfReference = self; >>> >>> within an interface extension. >>> >>> Naturally, this is raising some eyebrows with other members of the team, >>> but currently, no one has a solution to make sure that this core singleton >>> doesn't get deallocated when the app is in the background and has been >>> running for a while. >>> >>> Does this sound sane or a horrible idea? >>> >>> If it does sound like a horrible idea, how would you suggest preventing an >>> important singleton from being deallocated? >>> >>> Thanks in advance, >>> Alex Zavatone _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com