I've not read through all the solutions, so forgive if this code is redundant.
This is the most treadthread safe implementation in my opinion.
+(SingletonObject *) sharedManager { static SingletonObject * sharedResourcesObj = nil; @synchronized(self) { if (!sharedResourcesObj) { sharedResourcesObj = [[SingletonObject alloc] init]; } } return sharedResourcesObj; }