国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ios開發-NSOperation高級功能

2019-11-14 19:58:08
字體:
來源:轉載
供稿:網友

直接上代碼

示例1:

@interface TBViewController()

//隊列

@PRoperty(nonatomic,strong)NSOperationQueue *queue;

@end

//隊列的暫停和繼續(在storyboard中拖兩個按鈕,分別為暫停、繼續,連線)

//暫停

-(IBAction)pause

{

  if(self.queue.operationCount == 0){

  NSLog(@"無操作");

  return;

}

 

  //掛起》暫停  暫停的是隊列,讓隊列暫時不再派發任務

  NSLog(@"暫停");

  [self.queue setSuspended:YES];  

}

//繼續

-(IBAction)resumue

{

  if(self.queue.operationCount == 0){

  NSLog(@"無操作");

  return;

}

  NSLog(@"繼續");

  [self.queue setSuspended:NO];

}

//懶加載

-(NSOperationQueue *)queue

{

  if(_queue == nil){

  _queue = [[NSOperationQueue alloc]init];

}

  return _queue;

}

 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

  [self opDemo1];

}

//同時并發線程數量

-(void)opDemo1

{

  //線程開啟的隊列是由GCD底層決定的,程序員不能參與

 

/*

設置最大并發數的好處:線程開啟有消耗

3G:     2~3條線程,線程少,流量少,省錢,省電

WIFI:   5~6條線程,線程多,效率高,流量大,不花錢,可以隨時充電

*/

 

  self.queue maxConcurrentOperationCount = 3;//最大并發數量

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

    [self.queue addOperationWithBlock:^{

      //阻塞

        [NSThread sleepForTimeInterval:2];

      NSLog(@"%@ %d",[NSThread currentThread];)

}];

}

}

 

示例2:操作的依賴-》操作的執行順序

-(void)opDemo3

{

  /*

  例如:

  1、下載小電影的壓縮包

  2、解壓縮

  3、保存文件

  4、通知用戶

  */

NSBlockOperation*op1 = [NSBlockOperation blockOperationWithBlock:^{

    NSLog(@"下載:%@",[NSThread currentThread]);

}];

NSBlockOperation*op2 = [NSBlockOperation blockOperationWithBlock:^{

    NSLog(@"解壓縮:%@",[NSThread currentThread]);

}];

NSBlockOperation*op3 = [NSBlockOperation blockOperationWithBlock:^{

    NSLog(@"保存:%@",[NSThread currentThread]);

}];

NSBlockOperation*op4 = [NSBlockOperation blockOperationWithBlock:^{

    NSLog(@"通知用戶:%@",[NSThread currentThread]);

}];

  //依賴

  [op2 addDependency:op1];

  [op3 addDependency:op3];

  [op4 addDependency:op3];

  //循環依賴(一定不要出現)

  [op1 addDependency:op4];

  

  //異步的  waitUntilFinished  等待所有操作完成在繼續

  [self.queue addOperations:@[op1,op2,op3] waitUntilFinished:NO];

//主隊列

  [[NSOperationQueue mainQueue] addOperation:op4];

}

 

總結:

/*

  NSOperation

1.是對GCD的封裝

2、是OC的,面向對象的,使用更加容易

3、提供了一些特殊的方法,是GCD不容易實現的,例如:最大并發線程數量、暫停和繼續

4、可以指定操作的依賴關系,依賴關系是可以跨隊列的

5、自定義的隊列,是并發隊列,操作是異步任務

 

  GCD

1、是C語言的,難度有點大

2、once

3、after

4、GCD還有非常多復雜的功能

*/

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永安市| 洪雅县| 抚州市| 甘洛县| 肃南| 大悟县| 大宁县| 黄平县| 铅山县| 邳州市| 清新县| 格尔木市| 原平市| 米泉市| 安陆市| 新余市| 洛川县| 大渡口区| 丹阳市| 荔浦县| 玉田县| 长汀县| 南阳市| 公安县| 塔城市| 江津市| 霍山县| 碌曲县| 武城县| 开平市| 高淳县| 华坪县| 鹤壁市| 扎兰屯市| 轮台县| 武陟县| 楚雄市| 怀柔区| 左云县| 安图县| 绥宁县|