• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 知識大全 > 知識百科 > 百科知識 > ios什么是單例

    ios什么是單例

    時間: 歐東艷656 分享

    ios什么是單例

    單例模式是ios里面經常使用的模式,例如

    [UIApplicationsharedApplication] (獲取當前應用程序對象)、[UIDevicecurrentDevice](獲取當前設備對象);

    單例模式的寫法也很多。

    第一種:

    Java代碼#FormatImgID_0#
    1. static Singleton *singleton = nil;  
    2.   
    3. // 非線程安全,也是最簡單的實現  
    4. + (Singleton *)sharedInstance  
    5. {  
    6.     if (!singleton) {  
    7.         // 這里調用alloc方法會進入下面的allocWithZone方法  
    8.         singleton = [[self alloc] init];  
    9.     }  
    10.   
    11.     return singleton;  
    12. }  
    13.   
    14.   
    15. // 這里重寫allocWithZone主要防止[[Singleton alloc] init]這種方式調用多次會返回多個對象  
    16. + (id)allocWithZone:(NSZone *)zone  
    17. {  
    18.     if (!singleton) {  
    19.         NSLog(@"進入allocWithZone方法了...");  
    20.         singleton = [super allocWithZone:zone];  
    21.         return singleton;  
    22.     }  
    23.   
    24.     return nil;  
    25. }  

     

     

     

    第二種:

     

    Java代碼  #FormatImgID_1#
    1. // 加入線程安全,防止多線程情況下創建多個實例  
    2. + (Singleton *)sharedInstance  
    3. {  
    4.     @synchronized(self)  
    5.     {  
    6.         if (!singleton) {  
    7.             // 這里調用alloc方法會進入下面的allocWithZone方法  
    8.             singleton = [[self alloc] init];  
    9.         }  
    10.     }  
    11.   
    12.     return singleton;  
    13. }  
    14.   
    15.   
    16. // 這里重寫allocWithZone主要防止[[Singleton alloc] init]這種方式調用多次會返回多個對象  
    17. + (id)allocWithZone:(NSZone *)zone  
    18. {  
    19.     // 加入線程安全,防止多個線程創建多個實例  
    20.     @synchronized(self)  
    21.     {  
    22.         if (!singleton) {  
    23.             NSLog(@"進入allocWithZone方法了...");  
    24.             singleton = [super allocWithZone:zone];  
    25.             return singleton;  
    26.         }  
    27.     }  
    28.       
    29.     return nil;  
    30. }  


     

    第三種:

     

    Java代碼  #FormatImgID_2#
    1. __strong static Singleton *singleton = nil;  
    2.   
    3. // 這里使用的是ARC下的單例模式  
    4. + (Singleton *)sharedInstance  
    5. {  
    6.     // dispatch_once不僅意味著代碼僅會被運行一次,而且還是線程安全的  
    7.     static dispatch_once_t pred = 0;  
    8.     dispatch_once(&pred, ^{  
    9.         singleton = [[super allocWithZone:NULL] init];  
    10.     });  
    11.     return singleton;  
    12. }  
    13. // 這里  
    14. + (id)allocWithZone:(NSZone *)zone  
    15. {  
    16.       
    17.     /* 這段代碼無法使用, 那么我們如何解決alloc方式呢? 
    18.      dispatch_once(&pred, ^{ 
    19.         singleton = [super allocWithZone:zone]; 
    20.         return singleton; 
    21.     }); 
    22.      */  
    23.     return [self sharedInstance];  
    24. }  
    25.   
    26. - (id)copyWithZone:(NSZone *)zone  
    27. {  
    28.     return self;  
    29. }  

    245528 主站蜘蛛池模板: 久久精品国产亚洲AV水果派| 雪花飘影院手机版在线看| 麻豆乱码国产一区二区三区| 福利一区二区视频| 积积对积积的桶120分钟| 欧美xxxx做受欧美| 女人张开腿让男人捅| 人妻aⅴ无码一区二区三区| 久久精品一区二区三区av| 日本wwwxxxxx| 欧美成人看片一区二区三区 | 国产精品福利一区二区久久| 免费视频88av在线| 亚洲精品免费观看| 一区二区三区电影网| 精品视频一区二区观看| 搡女人免费视频大全| 国产偷v国产偷v国产| 九位美女尿撒尿11分钟| 日本人强jizzjizz老| 欧美交换性一区二区三区| 国产精品无码久久综合网| 国产一级大片在线观看| 久久天堂AV综合合色蜜桃网| 韩国福利影视一区二区三区| 福利所第一导航| 小猪视频免费网| 免费视频你懂的| jizz在亚洲| 西西大胆午夜人体视频| 日韩一区二区三区北条麻妃| 国产成人精品亚洲2020| 久久网免费视频| 网红鹿女神厨房被饥渴的| 欧美人与物videos另| 国内精品视频一区二区三区八戒 | 欧美一级视频免费看| 在线观看视频免费123| 免费日本黄色片| 久久久91精品国产一区二区三区| 四虎在线视频免费观看视频|