2013年6月10日 星期一

在objective-C宣告singleton

在YourClass中加入下列的初始化方法
status YourClass* singleton;
+ ( YourClass* ) initWithSingleton{

    @synchronized( self ){
   
        if ( ! singleton )
            singleton = [ [ YourClass alloc ] init ];

    }

    return singleton;

}

這邊的重點有四個
第一:以+宣告Class method,讓我們可以在實例被宣告之前就可以呼叫這個method。
第二:以status將singleton宣告為靜態實例。
第三:合成實例時,對getter做手腳,如果實例已經存在,則不宣告新的實例,直接return已存在的。
第四:用@synchronized()來控制不會被其他執行緒存取

另一種
+(BooksManager *)sharedInstance
{
    @synchronized(self)
    {
        if (sharedInstance == nil)
        {
            sharedInstance = [[self alloc] init];
        }
    }
    return sharedInstance;
}

沒有留言:

張貼留言