1. 程式人生 > >基於iOS 使用GCD實現列表介面的圖片非同步下載

基於iOS 使用GCD實現列表介面的圖片非同步下載

GCD 是Grand Central Dispatch 的簡稱,這是對多核程式設計的較新的解決方案,主要用於優化應用程式來支援多核處理器以及其他對稱系統。

    GCD提供了一種很簡單的操作方式來實現並行處理,可以把並行的程式碼放在一個block中,然後吧一個block加入一個queque中。

    GCD中提供了3中種佇列:

         1.Main:這個佇列順序地執行我們的block,並保證這些block都在主執行緒中執行。

         2.Concurrent:這個佇列會遵循FIFO的原則來執行其中的block,自動為你管理你的執行緒;

         3.Serial:佇列每次執行一個block,也遵循FIFO的規則。

   GCD的基本使用,建立一個佇列,(非主執行緒的佇列)將比較耗時的工作以block的形式放入到該隊列當中執行,以避免主執行緒阻塞,而注意要在主執行緒哪裡修改UI;

    dispath_queue_t queue=dispath_get_global_queue(0,0);

    dispath_async(queue,

      ^{

      for(int i=0;i<100;i++)

{

 [NStread sleepForTimeInterval:0.02];

//在主執行緒中更新內容

dispatch_async(dispatch_get_main_queue(),^{

 self.progressView.progress +=0.01;

});

}

});

CGD的其他使用方式

併發多執行緒的使用的情況:

   dispatch_queue_t queue=dispatch_get_global+global_queue(0,0);

        dispatch_async(queue,^{

                    NSString *str1=[self doWork1];   

                   dispatch_async(dispatch_get_main_queue(),^{

                    self.textView.text=[self.textView.text stringByAppendingFormat:@"

%@\r\n",str1]; });

});

dispatch_async(queue,^{

                    NSString *str2=[self doWork1];   

                   dispatch_async(dispatch_get_main_queue(),^{

                    self.textView.text=[self.textView.text stringByAppendingFormat:@"%@\r\n",str12]; });

});

dispatch_async(queue,^{

                    NSString *str3=[self doWork1];   

                   dispatch_async(dispatch_get_main_queue(),^{

                    self.textView.text=[self.textView.text stringByAppendingFormat:@"%@\r\n",str13]; });

});

首先要建立一個Concurrent型別的佇列,然後分別將要併發處理的block新增到這個隊列當中。

分派組的使用:

NSMutableString *totalString=[NSMutableString alloc]initWithCapcity:10]; 

//建立一個佇列組

       dispatch_group_t group=diapatch_group_create();

//建立佇列

   dispatch_queue_t queue=dispatch_get_global+global_queue(0,0);

//  建立一個佇列組                 組名     佇列名     執行的程式碼塊

   dispatch_groupp_async(group,queue,^{

   NSString*str1=[self doWork1];

  [totalString appendString:str1];

});

 dispatch_groupp_async(group,queue,^{

   NSString*str2=[self doWork2];

  [totalString appendString:str2];

});

 dispatch_groupp_async(group,queue,^{

   NSString*str3=[self doWork3];

  [totalString appendString:str3];

});

//以上的程式會非同步執行,最後才執行一下一句程式碼來改變textView的文字內容;

diapatch_group_notify(group,dispatch_get_main_queue(),^{

    self.textView.text=totalString;

});

使用GCD實現列表的非同步載入圖片

 一以下我提供答題 的思路來實現圖片的非同步載入

        1.我要定義一個儲存圖片的連結的陣列並且把儲存好所有的圖片連結;

        2.定義一個可變的儲存在網路上下載的圖片的可變陣列;

        3.定義一個相對應每一張圖片的標誌。

       4. 定義一張預設的圖片;

       5.定義tableview並實現代理;

      6.在代理的-(UItableviewcell*)tableview:(UItableview*)tableviewcellForRowAtINdexPath:(NSIndexPath*)indexPath;方法裡面來執行呼叫

    dispath_queue_t queue=dispath_get_global_queue(0,0);

    dispath_async(queue,

      ^{

      網路連結並且拿到圖片

 [NStread sleepForTimeInterval:0.02];

//在主執行緒中更新內容

dispatch_async(dispatch_get_main_queue(),^{

 在這裡更新UItablevie的列表

});

}

});

以上大體實現非同步多執行緒下載圖片的大體的佈置,接下來就是你們自己編寫,其實思想明白編寫就很簡單了。

相關推薦

基於iOS 使用GCD實現列表介面圖片非同步下載

GCD 是Grand Central Dispatch 的簡稱,這是對多核程式設計的較新的解決方案,主要用於優化應用程式來支援多核處理器以及其他對稱系統。     GCD提供了一種很簡單的操作方式來實現並行處理,可以把並行的程式碼放在一個block中,然後吧一個block加

基於React Native實現介面載入元件react-native-loadview

react-native-loadview 基於React Native實現的介面載入元件, Installation npm install react-native-loadview --save Import into your project import

[Xcode10 實際操作]八、網路與多執行緒-(22)使用GCD多執行緒技術非同步下載圖片

本文將演示如何使用使用GCD多執行緒技術非同步下載圖片。 Grand Central Dispatch(GCD) 是 Apple 開發的一個多核程式設計的較新的解決方法。 它主要用於優化應用程式以支援多核處理器以及其他對稱多處理系統。 它是一個線上程池模式的基礎上執行的併發任務。 在 Mac OS X

iOS】利用cell的重用機制取消圖片非同步下載

在專案中,我們會進行非同步的網路下載圖片把它載入UITableViewCell中上,一般情況下在我們會在cellForRow方法裡面設定cell的圖片資料來源(非同步進行網路下載圖片),也就是說如果一個cell的UIImageview物件開啟了一個下載任務,這個

基於KNN演算法實現的單個圖片數字識別

Test.csv中第1434行,圖片數字值為”0“,最終歸類為0,正確。 Test.csv中第14686行,圖片數字值為”8“,最終歸類為8,正確。 4原始碼 最後附上本次基於KNN思想實現單個數字圖片識別的全部原始碼。 /** * @Title: DigitClassification.java

android學習——實現歡迎介面圖片動畫滑動切換

剛學習的時候想做兩個activity之間滑動切換的效果,就查了幾個部落格寫了之前的一篇“activity實現動畫切換”,現在看來這個功能好水,難看且基本不會有用到的。 但第一次啟動APP歡迎介面滑動進入的效果很常見,所以就查資料寫了這麼一個。 首先要了解一下ViewPa

egg-ueditor,基於egg的UEditor百度編輯器後端實現,支援圖片/檔案上傳、列表圖片遠端抓取

egg-ueditor 基於egg的UEditor百度編輯器後端實現,支援圖片/檔案上傳、列表及圖片遠端抓取 原始碼:https://github.com/inmyjs/egg-ueditor 安裝 npm install egg-ueditor --save 使用方

Web驗證碼圖片的生成-基於Java的實現

submit esc page resp ioe 代碼 oge cnblogs pro 驗證碼圖片是由程序動態產生的,每次訪問的內容都是隨機的。那麽如何采用程序動態產生圖片,並能夠顯示在客戶端頁面中呢?原理很簡單,對於java而言,我們首先開發一個Servlet,這個Se

在一個div裏,列表樣式圖片進行float,實現水平排序

無序 .cn oat 最終 highlight 忘記 href 鏈接樣式 pla <div class="xiangce">   <ul>     <li><a href="#"><img src="images/pi

iOS Swift 實現圖片點擊縮放回彈動畫

obj mean awake art 簡單 onf 點擊縮放 fork sde 效果就是下面這個樣子: 思路借鑒的是MZTimerLabel,有想過做一個自定義的ImageView,但那樣的話之前view用必須要改代碼,索性就按照MZTimerLabel這個方式實現,簡

基於Vue + Node.js + MongoDB的圖片上傳組件,實現圖片的預覽和刪除

信息 clas 發送數據 演示 新增 one input標簽 return tof 公司要寫一些為自身業務量身定制的的組件,要基於Vue,趁著這個機會,自己在業余時間也寫了個組件,選擇寫圖片上傳是因為自己之前一直對這個功能比較迷糊,所以這次好好了解了一下。演示在網址打開後的

基於html5拖拽api實現列表的拖拽排序

ins urn attribute ret plain drag top round nodes 基於html5拖拽api實現列表的拖拽排序 html代碼: <ul ondrop="drop_handler(event);" ondragover="drago

基於Java NIO2實現非同步非阻塞訊息通訊框架

原文傳送門 基於Java NIO2實現的非同步非阻塞訊息通訊框架 前奏 AIO應用開發 Future方式 Callback方式 Reader/Writer方式實現 執行緒池和Group PendingExceptio

基於Spring Boot實現圖片上傳/加水印一把梭操作

文章共 537字,閱讀大約需要 2分鐘 ! 概述 很多網站的圖片為了版權考慮都加有水印,尤其是那些圖片類網站。自己正好最近和圖片打交道比較多,因此就探索了一番基於 Spring Boot這把利器來實現從 圖片上傳 → 圖片加水印 的一把梭操作! 注: 本文首發於 M

spring事務管理,基於xml配置完成事務回滾;spring中資料庫表中欄位名和pojo中屬性名不一致時候,實現RowMapper介面手動封裝

宣告使用JDK8,spring5.0.7, 測試說明: service 層 宣告介面進行轉賬,從A轉賬B ,然後對AB 進行更新操作,在事務中對find方法開啟 只讀許可權,無法進行更新操作,造成事務回滾進行測試事務; 主要測試方法:* void tra

【上傳檔案】基於阿里雲的視訊點播VOD、物件儲存OSS實現音視訊圖片等檔案上傳

一、效果演示 a.測試介面初始化 b.點選【上傳視訊】 c.點選【開始上傳】 d.點選【上傳音訊】選擇音訊之後點選【開始上傳】 c.點選【上傳圖片】,注意圖片上傳為單按鈕,選擇檔案之後自動完成上傳 d.點選【確定】來獲取以上幾個上傳檔案成功之後

列表實現登陸介面

建立了user_info是使用者檔案,user_lock是被鎖使用者檔案 # 作業需求: # 1. 使用者輸入帳號密碼進行登陸 # 2. 使用者資訊儲存在檔案內 # 3. 使用者密碼輸入錯誤三次後鎖定使用者   import sys u_info=open('user_info',

業務程式碼:基於spring的銀行支付介面模型實現

1.業務邏輯     當用戶選擇某一特定商品後,點選支付按鈕;跳轉到對應的支付頁面,在使用者選擇對應的支付銀行方式後,在頁面實現對應的優惠資訊。同時點選支付後,根據銀行對應的報文要求,進行支付。 2.邏輯分析   3.技術點: 工廠模式,反

Android實現Banner介面廣告圖片迴圈輪播

轉自:http://blog.csdn.net/stevenhu_223/article/details/45577781 前言:經常會看到有一些app的banner介面可以實現迴圈播放多個廣告圖片和手動滑動迴圈。本以為單純的ViewPager就可以實現這些功能。但是蛋疼的事情來了,Vi

java基於jsoup實現簡單的圖片爬蟲並下載

2018年11月04日 17:20:32 小小申 閱讀數:4 標籤: jsoup java