你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> 三種iOS多線程實現方法

三種iOS多線程實現方法

編輯:關於IOS

第一種,使用@synchronized(self)

 

static LocationController *sharedInstance;

+ (LocationController *)sharedInstance {
     @synchronized(self) {
     if (!sharedInstance)
     sharedInstance=[[LocationController alloc] init];
     }
     return sharedInstance;
}

@synchronized
作用:創建了一個互斥鎖,它的作用和其他語言中的互斥鎖作用一樣
解釋:這個是Objective-C中的一個鎖定令牌,方便一個對象在同一時間內被其他線程訪問,起到了線程保護的作用
使用范圍:一般在單例模式或者操作類的static變量的時候使用,即共用的變量的時候
外延:這個令牌隱式的包含了異常處理,如果你不想使用的話,就使用鎖吧

第二種,使用GCD

 

static LocationController *sharedInstance;

+ (LocationController *)sharedInstance {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (!sharedInstance)
            sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
   
}

在ios3.2上,有一種更簡單,更有效的方式實現它。就是通過Grand Central Dispatch系統。無論你何時需要在後台運行某個事務,你僅僅需要調用一下dispatch_async,然後傳需要執行的事務代碼給它即可。

其實,Grand Central Dispatch隱藏了很多後台處理細節如鎖和同步機制,並且它會根據情況創建一個新線程或使用已有的線程。
當你調用dispatch_async,你通過一個dispatch隊列,在這個隊列上存有很多block,先進先出,依次執行。
這個隊列可以使用dispatch_create自己創建,也可以調用主線程隊列dispatch_get_main_queue。這裡建立的隊列名稱是onceToken。

 

第三種,使用NSOperationQueue

 

但是,不知道從哪個版本開始,ios又對Grand Central Dispatch做了封裝,產生了一個新的類NSOperationQueue。
因此,使用NSOperationQueue就是使用Grand Central Dispatch,NSOperationQueue僅僅是建立在Grand Central Dispatch上一些簡單的API。

static LocationController *sharedInstance;

+ (LocationController *)sharedInstance {
    NSOperationQueue *onceToken=[[NSOperationQueue alloc] init];
    [onceToken addOperationWithBlock:^(){
      if (!sharedInstance)
            sharedInstance = [[self alloc] init];
    });
    return sharedInstance; 
    }];
    }

分享到:

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