본문 바로가기
프로그래밍 놀이터/iOS

[ios] object-c 제대로 singleton 만드는 방법.

by 돼지왕 왕돼지 2012. 11. 4.
반응형




object-c 제대로 singleton 만드는 방법.

- singleton 을 만들기 위해서는 "보통" 다음과 같이 정의하고 사용한다.

+(MyClass *)singleton {

    static MyClass *shared = nil;

     if(shared == nil) {

        shared = [[MyClass alloc] init];

    }

    return shared;

}

하지만 이는 thread safe 하지 않다. 

반드시 singleton 을 사용해야 한다면, thread-safe를 위해 dispatch_once() 를 사용하자.

dispatch_once() 는?

1. dispatch_once()  application lifecycle 동안 오직 한번만 불리는 것을 보장해준다.

2. 무조건 한번만 불리기 때문에 thread-safe 하다. ( 여러 thread 에서 동시접속하면 먼저 접속한 녀석이 먼저 끝나기를 기다린다. )


+(MyClass *)singleton {

    static dispatch_once_t pred;

    static MyClass *shared = nil;

    dispatch_once(&pred, ^{

        shared = [[MyClass alloc] init];

    });

    return shared;

}



Singleton 은 가급적이면 피하는 것이 좋지만, 꼭 사용해야 한다면 바로게 사용하자.



도움이 되셨다면 손가락 꾸욱~ ( 로그인 필요 x )



반응형

댓글