欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

iOS如何使用多線程提升數(shù)據(jù)并發(fā)訪問(wèn)-創(chuàng)新互聯(lián)

這篇文章主要介紹iOS如何使用多線程提升數(shù)據(jù)并發(fā)訪問(wèn),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)公司是一家專注于成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),新民網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:新民等地區(qū)。新民做網(wǎng)站價(jià)格咨詢:18982081108

第一個(gè)例子

這個(gè)例子演示了IO性能方面的一些問(wèn)題。稍后我會(huì)通過(guò)多線程技術(shù)來(lái)加速代碼的執(zhí)行效率。我的例子很簡(jiǎn)單:

  • 在第一個(gè)測(cè)試中,我會(huì)在一個(gè)table view中加載和顯示一序列圖片。然后,我會(huì)向你演示滾動(dòng)性能時(shí)的問(wèn)題:你不能滾動(dòng)表格直到當(dāng)前狀態(tài)的所有圖片全部返回。

  • 在第二個(gè)測(cè)試中,我會(huì)使用多線程加速程序的執(zhí)行。你會(huì)看到,當(dāng)你在等待圖片加載時(shí),滾動(dòng)性能將變得更好。


注意:對(duì)于這兩種情況,我的例子不會(huì)緩存圖片,這樣是為了讓你更清晰的看到這兩者的不同。

表格6-1展示的測(cè)試結(jié)果,是基于Core Animation測(cè)試的結(jié)果,你可以在一個(gè)真實(shí)的環(huán)境下看到應(yīng)用的測(cè)試結(jié)果。

iOS如何使用多線程提升數(shù)據(jù)并發(fā)訪問(wèn)

表格6-1的是在iPhone OS上處理和運(yùn)行應(yīng)用中,加載時(shí)的fps。你可以看到多線程能夠顯著的加速加載的過(guò)程。在沒(méi)有使用多線程的情況中,加載過(guò)程會(huì)阻塞UI,你的應(yīng)用將會(huì)被掛起。


我將會(huì)給你看一下源代碼,在深入解釋概念之前我會(huì)做一些簡(jiǎn)單的解釋。Listing 6-1 是第一個(gè)測(cè)試的原代碼。


Listing 6–1. First Benchmark; This Code Runs Inside the UITableViewDataSource’s Method.

- (UITableViewCell *)tableView:(UITableView *)tableView

cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        cell = [[UITableViewCell alloc]    initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier];

    }

    NSURL *p_w_picpathURL = [NSURL URLWithString:[self.p_w_picpathsArray objectAtIndex:indexPath.row]];

    cell.p_w_picpathView.p_w_picpath = [UIImage p_w_picpathWithData:[NSData   dataWithContentsOfURL:p_w_picpathURL]];

  // Configure the cell.

  return cell;

}

Listing 6-2 只是顯示了在異步代碼中返回圖片的通常做法。為了簡(jiǎn)單起見(jiàn),事實(shí)上異步代碼沒(méi)有在這邊顯示或討論。

Listing 6–2. Second Benchmark—Getting the Image Through a Background Thread

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    ImageCell *cell = (ImageCell *) [UIUtilities getCellWithTableView:tableViewcellIdentifier:CellIdentifiernibName:@"ImageCell"];

    // Configure the cell.

    NSURL *p_w_picpathURL = [NSURL URLWithString:[self.p_w_picpathsArrayobjectAtIndex:indexPath.row]];

    [cell.contentImage displayImageWithURL:p_w_picpathURL];

   return cell;

}

#import <Foundation/Foundation.h>#import "ImageFetcher.h"

@interface UIImageView (Network) <ImageFetcherDelegate>

    - (void)displayImageWithURL:(NSURL *)url;

@end

#import "UIImageView+Network.h"#import "ImageFetcher.h"

@implementation UIImageView (Network)

- (void)p_w_picpathFetcherFinished:(ImageFetcher *)fetcher {

    self.p_w_picpath = fetcher.p_w_picpath;

}

- (void)displayImageWithURL:(NSURL *)url {

    self.p_w_picpath = nil;
    if (url) {

      // This code will run in the background thread and callback when it retrieves// p_w_picpath
      [ImageFetcher loadImageWithURL:url delegate:self];

    }

}

@end

在第一個(gè)測(cè)試中,方法的內(nèi)部返回了table view的cell,我在這里獲取了圖片。對(duì)于這行代碼,iOS將會(huì)停止,然后等待圖片從網(wǎng)絡(luò)返回。之后,它繼續(xù)返回cell和把cell顯示給UI。這個(gè)等待過(guò)程使得應(yīng)用停止,這也就是在第一個(gè)測(cè)試中你不能快速滾動(dòng)table view的原因。

對(duì)于第二個(gè)測(cè)試,我使用了異步代碼,它是多線程的另一種形式,但是底層庫(kù)將會(huì)為你處理多線程代碼。通過(guò)這段代碼,主進(jìn)程從等待下載完成的進(jìn)程中解放出來(lái)。因此,在第二個(gè)測(cè)試中,你可以滾動(dòng)table view,而沒(méi)有任何問(wèn)題。

多線程的好處

在iPhone應(yīng)用中,你一些情況你應(yīng)該考慮使用多線程。

  • 利用所有的內(nèi)核和處理器:(一個(gè)處理器總是有多個(gè)內(nèi)核,而內(nèi)核實(shí)際上是計(jì)算單元。)目前,iPhone 4 只有一個(gè)處理器和內(nèi)核,但是iPhone 5 可能會(huì)有更多的內(nèi)核,那么你將能夠利用所有可用的處理器來(lái)提升你應(yīng)用的性能。

  • 建模:你可能想嘗試從真實(shí)世界的行為中進(jìn)行建模。例如,考慮這么一種解決方案,你有12種不同類型的任務(wù)要做(解決bug,面試系統(tǒng)管理員,創(chuàng)建你的下一個(gè)產(chǎn)品演示幻燈片,等等),另外一種是只有一個(gè)復(fù)雜的任務(wù)(解決12個(gè)bug)。后一種解決方案很簡(jiǎn)單,你只有一個(gè)工作隊(duì)列去完成。第一種情況是比較復(fù)雜的解決方案,你可以為每一個(gè)任務(wù)分配一個(gè)線程。

  • 處理IO任務(wù):通常,IO(網(wǎng)絡(luò)和文件)任務(wù)需要花費(fèi)時(shí)間來(lái)返回?cái)?shù)據(jù)給應(yīng)用。因此,如果你使用一個(gè)線程來(lái)處理,你的應(yīng)用會(huì)停止工作,花費(fèi)時(shí)間來(lái)等待數(shù)據(jù)。使用多線程可以幫助你把IO線程進(jìn)行分割,等它接收到所有數(shù)據(jù)之后在合并到主線程中。

  • 更靈敏的UI響應(yīng):所有d的GUI應(yīng)用,比如iPhone,啟動(dòng)的時(shí)候只有一個(gè)線程,意味著所有應(yīng)用的代碼都是通過(guò)main event loop(也叫著main run loop)來(lái)執(zhí)行的。event loop就是當(dāng)應(yīng)用收到用戶的輸入事件(比如,單擊,滑動(dòng),雙擊),然后會(huì)運(yùn)行這個(gè)輸入事件響應(yīng)的邏輯。應(yīng)用在event loop執(zhí)行的時(shí)間越長(zhǎng),UI反應(yīng)就越不靈敏。

  • 在后臺(tái)進(jìn)行一些邏輯處理:這同樣是iPhone應(yīng)用代碼中非常重要的一部分。在某些情況下你可能需要處理一些大數(shù)據(jù),比如運(yùn)行一個(gè)XML解析算法來(lái)解析數(shù)據(jù)。這同樣跟UI的響應(yīng)有關(guān):在UI線程做的工作越少,程序就會(huì)有越好的用戶體驗(yàn)。

以上是“iOS如何使用多線程提升數(shù)據(jù)并發(fā)訪問(wèn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享標(biāo)題:iOS如何使用多線程提升數(shù)據(jù)并發(fā)訪問(wèn)-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://chinadenli.net/article26/dhpcjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化建站公司、網(wǎng)站設(shè)計(jì)外貿(mào)網(wǎng)站建設(shè)品牌網(wǎng)站制作、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)