付費(fèi)下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】iOS開發(fā)多線程篇—NSOperation基本操作
一、并發(fā)數(shù)(1)并發(fā)數(shù):同時(shí)執(zhí)行的任務(wù)數(shù).比如,同時(shí)開3個(gè)線程執(zhí)行3個(gè)任務(wù),并發(fā)數(shù)就是3(2)最大并發(fā)數(shù):同一時(shí)間最多只能執(zhí)行的任務(wù)的個(gè)數(shù)。(3)最大并發(fā)數(shù)的相關(guān)方法-(NSInteger)maxConcurrentOperationCount;-(void)setMaxConcurrentOperationCount:(NSInteger)cnt;
說明:如果沒有設(shè)置最大并發(fā)數(shù),那么并發(fā)的個(gè)數(shù)是由系統(tǒng)內(nèi)存和CPU決定的,可能內(nèi)存多久開多一點(diǎn),內(nèi)存少就開少一點(diǎn)。注意:num的值并不代表線程的個(gè)數(shù),僅僅代表線程的ID。提示:最大并發(fā)數(shù)不要亂寫(5以內(nèi)),不要開太多,一般以2~3為宜,因?yàn)殡m然任務(wù)是在子線程進(jìn)行處理的,但是cpu處理這些過多的子線程可能會(huì)影響UI,讓UI變卡。
二、隊(duì)列的取消,暫停和恢復(fù)
(1)取消隊(duì)列的所有操作
-(void)cancelAllOperations;提:也可以調(diào)用NSOperation的-(void)cancel法取消單個(gè)操作
(2)暫停和恢復(fù)隊(duì)列-(void)setSuspended:(BOOL)b;//YES代表暫停隊(duì)列,NO代表恢復(fù)隊(duì)列-(BOOL)isSuspended;//當(dāng)前狀態(tài)(3)暫停和恢復(fù)的適用場(chǎng)合:在tableview界面,開線程下載遠(yuǎn)程的網(wǎng)絡(luò)界面,對(duì)UI會(huì)有影響,使用戶體驗(yàn)變差。那么這種情況,就可以設(shè)置在用戶操作UI(如滾動(dòng)屏幕)的時(shí)候,暫停隊(duì)列(不是取消隊(duì)列),停止?jié)L動(dòng)的時(shí)候,恢復(fù)隊(duì)列。
三、操作優(yōu)先級(jí)
(1)設(shè)置NSOperation在queue中的優(yōu)先級(jí),可以改變操作的執(zhí)優(yōu)先級(jí)-(NSOperationQueuePriority)queuePriority;-(void)setQueuePriority:(NSOperationQueuePriority)p;
(2)優(yōu)先級(jí)的取值NSOperationQueuePriorityVeryLow=-8L,NSOperationQueuePriorityLow=-4L,NSOperationQueuePriorityNormal=0,NSOperationQueuePriorityHigh=4,NSOperationQueuePriorityVeryHigh=8
說明:優(yōu)先級(jí)高的任務(wù),調(diào)用的幾率會(huì)更大。
四、操作依賴(1)NSOperation之間可以設(shè)置依賴來保證執(zhí)行順序,如一定要讓操作A執(zhí)行完后,才能執(zhí)行操作B,可以像下面這么寫[operationBaddDependency:operationA];//操作B依賴于操作(2)可以在不同queue的NSOperation之間創(chuàng)建依賴關(guān)系
注意:不能循環(huán)依賴(不能A依賴于B,B又依賴于A)。(3)代碼示例
1
#import
"YYViewController.h"
2
3
@interface
YYViewController
()
4
5
@end
6
7
@implementation
YYViewController
8
9
-
(void)viewDidLoad10
{11
[super
viewDidLoad];12
13
//創(chuàng)建NSInvocationOperation對(duì)象,封裝操作14
NSInvocationOperation
*operation1=[[NSInvocationOperation
alloc]initWithTarget:self
selector:@selector(test1)
object:nil];15
NSInvocationOperation
*operation2=[[NSInvocationOperation
alloc]initWithTarget:self
selector:@selector(test2)
object:nil];16
//創(chuàng)建對(duì)象,封裝操作17
NSBlockOperation
*operation3=[NSBlockOperation
blockOperationWithBlock:^{18
for
(int
i=0;
i<5;
i++)
{19
NSLog(@"NSBlockOperation3--1%@",[NSThread
currentThread]);20
}21
}];22
[operation3
addExecutionBlock:^{23
for
(int
i=0;
i<5;
i++)
{24
NSLog(@"NSBlockOperation3--2%@",[NSThread
currentThread]);25
}26
}];27
28
//設(shè)置操作依賴29
//先執(zhí)行operation2,再執(zhí)行operation1,最后執(zhí)行operation330
[operation3
addDependency:operation1];31
[operation1
addDependency:operation2];32
33
//不能是相互依賴34
//
[operation3
addDependency:operation1];35
//
[operation1
addDependency:operation3];36
37
//創(chuàng)建NSOperationQueue38
NSOperationQueue
*
queue=[[NSOperationQueue
alloc]init];39
//把操作添加到隊(duì)列中40
[queue
addOperation:operation1];41
[queue
addOperation:operation2];42
[queue
addOperation:operation3];43
}44
45
-(void)test146
{47
for
(int
i=0;
i<5;
i++)
{48
NSLog(@"NSInvocationOperation--test1--%@",[NSThread
currentThread]);49
}50
}51
52
-(void)test253
{54
for
(int
i=0;
i<5;
i++)
{55
NSLog(@"NSInvocationOperation--test2--%@",[NSThread
currentThread]);56
}57
}58
59
@end
打印查看:A做完再做B,B做完才做C。注意:一定要在添加之前,進(jìn)行設(shè)置。提示:任務(wù)添加的順序并不能夠決定執(zhí)行順序,執(zhí)行的順序取決于依賴。使用Operation的目的就是為了讓開發(fā)人員不再關(guān)心線程。
5.操作的監(jiān)聽可以監(jiān)聽一個(gè)操作的執(zhí)行完畢-(void(^)(void))completionBlock;-(void)setCompletionBlock:(void(^)(void))block;
代碼示例第一種方式:可以直接跟在任務(wù)后面編寫需要完成的操作,如這里在下載圖片后,緊跟著下載第二張圖片。但是這種寫法有的時(shí)候把兩個(gè)不相關(guān)的操作寫到了一個(gè)代碼塊中,代碼的可閱讀性不強(qiáng)。
1
#import
"YYViewController.h"
2
3
@interface
YYViewController
()
4
5
@end
6
7
@implementation
YYViewController
8
9
-
(void)viewDidLoad10
{11
[super
viewDidLoad];12
13
//創(chuàng)建對(duì)象,封裝操作14
NSBlockOperation
*operation=[NSBlockOperation
blockOperationWithBlock:^{15
NSLog(@"-operation-下載圖片-%@",[NSThread
currentThread]);16
//下載圖片后繼續(xù)進(jìn)行的操作17
NSLog(@"--接著下載第二張圖片--");18
}];19
20
//創(chuàng)建隊(duì)列21
NSOperationQueue
*queue=[[NSOperationQueue
alloc]init];22
//把任務(wù)添加到隊(duì)列中(自動(dòng)執(zhí)行,自動(dòng)開線程)23
[queue
addOperation:operation];24
}25
26
@end第二種方式:
1
#import
"YYViewController.h"
2
3
@interface
YYViewController
()
4
5
@end
6
7
@implementation
YYViewController
8
9
-
(void)viewDidLoad10
{11
[super
viewDidLoad];12
13
//創(chuàng)建對(duì)象,封裝操作14
NSBlockOperation
*operation=[NSBlockOperation
blockOperationWithBlock:^{15
for
(int
i=0;
i<10;
i++)
{16
NSLog(@"-operation-下載圖片-%@",[NSThread
currentThread]);17
}18
}];19
20
//監(jiān)聽操作的執(zhí)行完畢21
pletionBlock=^{22
//下載圖片后繼續(xù)進(jìn)行的操作23
NSLog(@"--接著下載第二張圖片--");24
};25
26
//創(chuàng)建隊(duì)列27
NSOperationQueue
*queue=[[NSOperationQueue
alloc]init];28
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 丙烯酸樹脂裝置操作工崗前評(píng)優(yōu)考核試卷含答案
- 鉭鈮加工材制取工崗前變更管理考核試卷含答案
- 松香浸提工崗前評(píng)審考核試卷含答案
- 土石方挖掘機(jī)司機(jī)班組考核競(jìng)賽考核試卷含答案
- 貨運(yùn)調(diào)度員操作安全測(cè)試考核試卷含答案
- 煤提質(zhì)工崗前工藝規(guī)程考核試卷含答案
- 汽車美容裝潢工班組安全知識(shí)考核試卷含答案
- 玻纖織布帶工誠信模擬考核試卷含答案
- 電工合金金屬粉末處理工崗前進(jìn)階考核試卷含答案
- 平板顯示膜涂布工班組評(píng)比競(jìng)賽考核試卷含答案
- 五年級(jí)上冊(cè)道法期末模擬試卷及答案
- 財(cái)務(wù)信息化與財(cái)務(wù)共享服務(wù)模式2025年可行性分析報(bào)告
- 煙花爆竹經(jīng)營(yíng)零售申請(qǐng)書
- 《鯉魚的遇險(xiǎn)》讀書分享
- 融媒體中心黨支部2025年前三季度黨建工作總結(jié)范文
- 提升施工企業(yè)安全管理水平的關(guān)鍵措施與路徑探索
- 自動(dòng)扶梯應(yīng)急預(yù)案演練計(jì)劃(3篇)
- GB/T 16271-2025鋼絲繩吊索插編索扣
- 暴盲的中醫(yī)護(hù)理方案
- GB/T 20871.62-2025有機(jī)發(fā)光二極管顯示器件第6-2部分:測(cè)試方法視覺質(zhì)量和亮室性能
- 旋挖鉆機(jī)地基承載力驗(yàn)算2017.7
評(píng)論
0/150
提交評(píng)論