天天看點

iOS開發多線程篇—自定義NSOperation

一、實作一個簡單的tableview顯示效果

實作效果展示:

iOS開發多線程篇—自定義NSOperation

代碼示例(使用以前在主要制器中進行業務處理的方式)

1.建立一個項目,讓控制器繼承自uitableviewcontroller。

iOS開發多線程篇—自定義NSOperation
iOS開發多線程篇—自定義NSOperation

2.處理storyboard中得界面,如下:

iOS開發多線程篇—自定義NSOperation

3.根據plist檔案,字典轉模型

iOS開發多線程篇—自定義NSOperation

建立一個類,繼承自nsobject,作為資料的模型

yyappmodel.h檔案

iOS開發多線程篇—自定義NSOperation
iOS開發多線程篇—自定義NSOperation

yyappmodel.m檔案

iOS開發多線程篇—自定義NSOperation
iOS開發多線程篇—自定義NSOperation

主要制器中得邏輯控制部分,yyviewcontroller.m檔案

iOS開發多線程篇—自定義NSOperation
iOS開發多線程篇—自定義NSOperation

列印檢視:

iOS開發多線程篇—自定義NSOperation

二、自定義nsoperation

說明:上面的下載下傳圖檔資料部分是一個非常耗時的操作,這個操作任務在主線程完成,會嚴重的影響到使用者體驗,造成ui卡的現象。下面通過自定義nsoperation,新開線程,讓加載圖檔的任務異步執行。

1.通過代理

在上面的基礎上,建立一個類,讓其繼承自nsoperation。

yydownloadoperation.h檔案

iOS開發多線程篇—自定義NSOperation
iOS開發多線程篇—自定義NSOperation

yydownloadoperation.m檔案

iOS開發多線程篇—自定義NSOperation
iOS開發多線程篇—自定義NSOperation

主要制器中的業務邏輯:

iOS開發多線程篇—自定義NSOperation
iOS開發多線程篇—自定義NSOperation

說明:通過列印可以發現上面的代碼存在很大的問題。

問題1:需要保證一個url對應一個operation對象。

問題2:下載下傳完需要移除。移除執行完畢的操作。

問題3:保證一個url對應一個image。

下面對主要制器中得代碼進行改進:

iOS開發多線程篇—自定義NSOperation
iOS開發多線程篇—自定義NSOperation
iOS開發多線程篇—自定義NSOperation