iOS單例子類化問題

繼之前轉載的iOS單例模式,經查看文檔及書籍,瞭解有關單例子類化的問題。 對於前面的iOS單例模式,一般使用基本已能滿足。但有時要將單例子類化時,我們將會遇到問題。 下面上代碼:
//之前的簡要代碼
+ (id)sharedManager {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}

//改進後代碼
+ (id)sharedManager {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        //這樣初始化的singletone 當子類化時,永遠返回的是Singletone。 因爲Singleton重載了所有實例話相關的方法,所以對其子類化相當需要技巧。
        //下面是改進方法
        //        sharedMyManager = [[super allocWithZone:NULL] init];
        //使用此方法[NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone * zone),根據類的類型實例化任何對象。
        sharedMyManager = [NSAllocateObject([self class], 0, NULL) init];
    });
    return sharedMyManager;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章