第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我的Objective-C單身人物應(yīng)該是什么樣的?

我的Objective-C單身人物應(yīng)該是什么樣的?

我的Objective-C單身人物應(yīng)該是什么樣的?我的單例訪(fǎng)問(wèn)器方法通常是以下的一些變體:static MyClass *gInstance = NULL;+ (MyClass *)instance{     @synchronized(self)     {         if (gInstance == NULL)             gInstance = [[self alloc] init];     }     return(gInstance);}我可以做些什么來(lái)改善這個(gè)?
查看完整描述

3 回答

?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊

另一種選擇是使用該+(void)initialize方法。從文檔:

運(yùn)行時(shí)initialize在程序之前恰好一次發(fā)送給程序中的每個(gè)類(lèi),或者從程序中發(fā)送它的第一個(gè)消息。(因此,如果未使用該類(lèi),則永遠(yuǎn)不會(huì)調(diào)用該方法。)運(yùn)行時(shí)initialize以線(xiàn)程安全的方式將消息發(fā)送到類(lèi)。超類(lèi)在其子類(lèi)之前接收此消息。

所以你可以做類(lèi)似于此的事情:

static MySingleton *sharedSingleton;+ (void)initialize{
    static BOOL initialized = NO;
    if(!initialized)
    {
        initialized = YES;
        sharedSingleton = [[MySingleton alloc] init];
    }}


查看完整回答
反對(duì) 回復(fù) 2019-05-27
?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊

根據(jù)我在下面的其他答案,我認(rèn)為你應(yīng)該這樣做:

+ (id)sharedFoo{
    static dispatch_once_t once;
    static MyFoo *sharedFoo;
    dispatch_once(&once, ^ { sharedFoo = [[self alloc] init]; });
    return sharedFoo;}


查看完整回答
反對(duì) 回復(fù) 2019-05-27
?
大話(huà)西游666

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊

一個(gè)線(xiàn)程安全的單例,試圖避免鎖定成本,我想我也會(huì)拋出一個(gè):

#import <libkern/OSAtomic.h>static void * volatile sharedInstance = nil;                                                
+ (className *) sharedInstance {                                                                    
  while (!sharedInstance) {                                                                          
    className *temp = [[self alloc] init];                                                                 
    if(!OSAtomicCompareAndSwapPtrBarrier(0x0, temp, &sharedInstance)) {
      [temp release];                                                                                   
    }                                                                                                    
  }                                                                                                        
  return sharedInstance;                                                                        }

好的,讓我解釋一下這是如何工作的:

  1. 快速情況:在正常執(zhí)行sharedInstance中已經(jīng)設(shè)置好了,所以while循環(huán)永遠(yuǎn)不會(huì)執(zhí)行,只需測(cè)試變量的存在就會(huì)返回函數(shù);

  2. 慢速情況:如果sharedInstance不存在,則使用比較和交換('CAS')分配實(shí)例并將其復(fù)制到其中;

  3. 爭(zhēng)鳴情況:如果兩個(gè)線(xiàn)程都試圖調(diào)用sharedInstance在同一時(shí)間 sharedInstance同一時(shí)間不存在,那么他們都將初始化為CAS是單身主義者和嘗試的新實(shí)例到位。無(wú)論哪一個(gè)贏得CAS立即返回,無(wú)論哪一個(gè)失去釋放它剛剛分配的實(shí)例并返回(現(xiàn)在設(shè)置)sharedInstance。單個(gè)OSAtomicCompareAndSwapPtrBarrier作為設(shè)置線(xiàn)程的寫(xiě)屏障和來(lái)自測(cè)試線(xiàn)程的讀屏障。


查看完整回答
反對(duì) 回復(fù) 2019-05-27
  • 3 回答
  • 0 關(guān)注
  • 741 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)