Skip to content

cjhanson/Objective-C-Optimized-Singleton

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 

Repository files navigation

If your system supports blocks (like iOS 4+) then you should just use the dispatch_once function as follows:

+ (MyClass *)sharedInstance
{
    static MyClass *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[MyClass alloc] init];
        // Do any other initialisation stuff here
    });
    return sharedInstance;
}

This method was sourced from http://stackoverflow.com/questions/7568935/how-do-i-implement-an-objective-c-singleton-that-is-compatible-with-arc courtesy Nick Forge


=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=


See the "pre-blocks" branch for the old implementation:

A Singleton Macro that swaps method implementations at runtime so that only the initialization portion will require syncrhonization (lock).
- Specifically it uses method_setImplementation() to dynamically replace the sharedInstance access method with one that does not instantiate a new object and thus does not require @synchronized.

It is based on the work here: http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html  by Matt Gallagher
But changing the implementation to use method swizzling as described here: http://googlemac.blogspot.com/2006/11/synchronized-swimming-part-2.html by Dave MacLachlan of Google.

About

A Singleton Macro that swaps method implementations at runtime so that only the initialization portion will require syncrhonization (lock)

Resources

Stars

170 stars

Watchers

11 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors