study - iOS

[ios] ios에서 singleton 생성하기

ODING2 2019. 4. 21. 23:07

ingleton 객체 생성 할 때, 어플리케이션 life cycle동안 한 번만 불릴 수 있도록 조절한다

래와 같이 thread-safe를 위해 dispatch_once() 를 사용하자.

 

[OBJECTIVE - C]

static Manager *_sharedManagerInstance = nil;
 
+ (void) close
{
    _sharedManagerInstance = nil;
}
 
+ (Manager *)sharedManager
{
    static dispatch_once_t predicate;
    
    dispatch_once(&predicate, ^{
        _sharedManagerInstance = [[self alloc] init];
    });
    return _sharedManagerInstance;

}

[SWIFT]

class Singleton {
    class var sharedManager: Singleton {
        struct Static {
            static var onceToken: dispatch_once_t = 0
            static var instance: Singleton? = nil
        }
        dispatch_once(&Static.onceToken) {
            Static.instance = Singleton()
        }
        return Static.instance!
    }
}

사실 swift 에서는 그냥

class Singleton  {
   static let sharedManager = Singleton()
}

let 정의가 thread safety 하기때문에 이렇게만 해줘도 된다,,