你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> iOS單例

iOS單例

編輯:關於IOS

在iOS開發中單例用的非常普遍,比如說通知中心,NSUserDefauld等都都是單例模式,原來以為創建一個單例是很簡單的事情。直接用GCD來搞定。

<code>+ (instancetype)shared
{
    static dispatch_once_t once = 0;
    static Class *singleton;
    dispatch_once(&amp;once, ^{
        alert = [[Class alloc] init];
    });
    return singleton;
}</code>

這樣就搞定了,今天忽然被問到怎麼避免通過自帶的alloc來進行實例化,這樣就不能保證單例了。

那麼只要把alloc都禁止使用就可以了,所以我們需要重載系統提供的各種alloc方法來避免這種情況。

我們來稍微改造一下

<code>+ (instancetype)hiddenAlloc
{
    return [super alloc];
}

+ (instancetype)alloc
{
    NSAssert(NO, @"請使用shared方法");
    return nil;
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    return [self alloc];
}

+ (instancetype)new
{
    return [self alloc];
}

+ (instancetype)shared
{
    static dispatch_once_t once = 0;
    static HHAlertView *alert;
    dispatch_once(&amp;once, ^{
        alert = [[HHAlertView hiddenAlloc] init];
    });
    return alert;
}</code>

以上重載了alloc、allocWithZone和new方法,讓其不能調用父類的alloc方法,然後創建我們的私有alloc方法,在alloc方法中加上斷言來提醒。

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved