iOS開發多線程在實際項目中的運用

來源:互聯網
上載者:User

在實際項目開發中為了能夠給使用者更好的體驗,有些延時操作我們都會放在子線程中進行。

今天我們就來聊聊多線程在實際項目中的運用。

我們先來看看多線程的基礎知識:

1.多線程的原理:

        同一時間,CPU只能處理一條線程,也就是只有一條線程在工作。所謂多線程並發(同時)執行,

其實是CPU快速的在多線程之間調度(切換)。如果CPU調度線程的時間足夠快,就造成了多線程並

發執行的假象。

2.在實際項目開發中並不是線程越多越好,如果開了大量的線程,會消耗大量的CPU資源,CPU會

被累死,所以一般手機只開1~3個線程為宜,不超過5個。

3.多線程的優缺點:

優點:1.能適當提高程式的執行效率

       2.能適當提高資源的利用率,這個利用率表現在(CPU,記憶體的利用率)

缺點:1.開啟線程需要佔用一定的記憶體空間(預設情況下,主線程佔用1M,

子線程佔用512KB,如果開啟大量的線程,會佔用大量的記憶體空間,降低程式

的效能)

     2.線程越多,CPU在調度線程上的開銷就越大

     3.程式設計就越複雜:比如線程之間的通訊,多線程的資料共用,這些

都需要程式的處理,增加了程式的複雜度。

4.在iOS開發中使用線程的注意事項:

    1.別將比較耗時的操作放在主線程中

    2.耗時操作會卡住主線程,嚴重影響UI的流暢度,給使用者一種“卡”的壞體驗

好了,多線程在iOS中的開發概念性的東西就講這麼多,下面我們來類比一種開發中的情境:

我們在開發中經常會遇到,當你要緩衝一組圖片,但是這些圖片必須要等到你緩衝好了後再來展現在UI上,

可是我們緩衝圖片的時候用的是SDWebImage架構,緩衝的操作是非同步進行的,我們如何來做到等緩衝好了

再來執行以後的操作呢。下面講個實現起來非常簡單,方便的方法:

我先來放上代碼,後面進行講解:

//1.添加一個組        let group = dispatch_group_create()                //緩衝圖片        for url in picURLs! {                        //2.將當前的下載操作添加到組中            dispatch_group_enter(group)            SDWebImageManager.sharedManager().downloadImageWithURL(url, options: SDWebImageOptions.init(rawValue: 0), progress: nil, completed: { (_, _, _, _, _) in                                //3.離開當前組                dispatch_group_leave(group)                print("正在緩衝中...")            })        }                //通過閉包將資料傳遞給調用者(通知圖片緩衝完畢)        dispatch_group_notify(group, dispatch_get_main_queue()) {            print("緩衝完畢。")            finished()        }

列印結果如下:


從輸出結果我們就可以看出來:我們做到了緩衝完畢後再來執行以後的操作。

是如何做到的呢。

我在代碼中已經用數字標出來了:

1.我們首先用

let group = dispatch_group_create()
函數來建立一個組,用來存放緩衝的操作

2.用這個函數做到把每一次的緩衝操作都添加到組中

dispatch_group_enter(group)
3.緩衝圖片我用的是SDWebImage架構,我們可以看到,我在緩衝完畢後離開當前組,用到如下函數
dispatch_group_leave(group)
用了這三步就能做到我們想要的功能嗎。顯然不是,做了這三部系統內部就會為我們做些事了,

當我們離開當前組的時候,系統就會發出一個通知,我們來接收這個通知,當我們接收到這個通知的時候

我們就可以執行finished的操作了,接收通知的函數是:

dispatch_group_notify(group, dispatch_get_main_queue()) {            print("緩衝完畢。")            finished()        }
以上就是一個非常方便的實現我們需要的功能的方法



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.