iOS开发之网络多线程

iOS开发之网络多线程

1. pthred (POSIX) 一般情况不用

2. NSThread

  1. NSThread *thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(dealThreadExit:) object:nil];
  2. [thread1 start];
  3. [NSThread detachNewThreadSelector:@selector(detailTextLabel) toTarget:self withObject:nil];
  4. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dealThreadExit:) name:NSThreadWillExitNotification object:nil];
  5. [thread1 cancel];         // 叫thread1 可以停止了
  6. [thread1 isCancelled];  // 看thread1 是否可以停止
  7. [NSThread exit];          // 停止当前线程
  8. //    [self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>] 让此方法在主线程中执行

3.NSOperation

 

//------------------NSOperationQueue----------

//  立即执行

NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];

[operationQueue addOperationWithBlock:^{

}];

//  设置线程池的最大并发数

operationQueue.maxConcurrentOperationCount = 2;

//  创建了一个可以放入线程池的线程

NSInvocationOperation  *inth1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread1:) object:nil];

// 设置放入线程池的线程的优先级

inth1.queuePriority = 1;

[operationQueue addOperation:inth1];

[NSThread isMainThread];//  当前的线程是否是主线程

[NSThread isMultiThreaded]; // 当前的线程是否是

[NSThread sleepForTimeInterval:1.0]; // 当前线程休眠xx秒

4.GCD

// 创建一个优先级任务

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

// 启动一个async 异步任务

dispatch_async(queue, ^{

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

NSLog(@"A = %d",i);

}

});

//  又启动一个异步任务

dispatch_async(queue, ^{

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

NSLog(@"B = %d",i);

}

});

//GCD最简单开启异步任务的形式 // 创建一个异步线程 传入优先级

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

});

// 开启一个任务在主线程上执行

dispatch_async(dispatch_get_main_queue(), ^{

});

// 开启一个异步任务只执行一次

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

});

//  开启一个异步任务组xxx 可以控制全部任务完成以后在执行什么任务

// 开启一个异步任务xx 秒以后执行

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

});

// group 任务组  group是一个任务组 可以为他添加多个任务

dispatch_group_t group = dispatch_group_create();

//添加任务  7s完成      /任务组/                  / 优先级设置/

dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

});

// 10s完成

dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

});

// 这些任务全部是异步执行的   此方法检测当任务组 group 没有正在执行的任务的时执行.... 任务

dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

NSLog(@"所有任务执行完成, 自动关机");

});

时间: 2024-08-07 00:15:22

iOS开发之网络多线程的相关文章

iOS开发笔记 - 网络篇

计算机网络基础 ??计算机网络是多台独立自主的计算机互联而成的系统的总称,最初建立计算机网络的目的是实现信息传递和资源共享. ??如果说计算机是第二次世界大战的产物,那么计算机网络则是美苏冷战的产物.20世纪60年代初期,美国国防部领导的ARPA提出研究一种崭新的.能够适应现代战争的.生存性很强的通信系统并藉此来应对苏联核攻击的威胁,这个决定促使了分组交换网的诞生,也奠定今天计算机网络的原型,这是计算机网络发展史上第一个里程碑式的事件. ??第二个里程碑式的事件是20世纪80年代初,国际标准化组

iOS开发系列--网络开发

iOS开发系列--网络开发 2014-10-22 08:34 by KenshinCui, 50097 阅读, 53 评论, 收藏,  编辑 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力的.今天就会给大家介绍这部分内容: Web请求和响应 使用代理方法 简化请求方法 图片缓存 扩展--文件分段下载 扩展--文件上传 NSURLSession

iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄

前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传.    在实际开发中,输入输出流用的比较少,但是用起来也是很方便的.iOS开发用到的输入输出流和在Java中的输入输出流是几乎一样的,本质也是一个意思:将网络返回的数据当做流来处理.    输入输出的理解:输入到哪里?输出到哪里?这个问题不难理解,输入输出是要站着服务器角度来思考的,下面用图来解释:    代码关键词: 1.在接收到响应头的代理

iOS开发之网络编程--使用NSURLConnection实现大文件下载

主要思路(实现下载数据分段写入缓存中) 1.使用NSURLConnectionDataDelegate以及代理方法.2.在成功获取响应的代理方法中,获得沙盒全路径,并在该路径下创建空文件和文件句柄.3.在获取data的代理方法中,先设置句柄在沙盒全路径文件末尾,然后通过句柄写入data数据.4.在文件下载完的代理方法中,关闭句柄同时设置句柄引用为nil释放句柄和指针. 使用句柄的思路图(红色的箭头表示句柄,灰色的箭头表示移动的路径): 代码关键词: 类:NSFileHandle的方法 1.fil

IOS开发之网络开发工具

IOS开发之网络开发工具 做移动端开发  经常会涉及到几个模块:1.网络检测   2.网络请求get和post请求  3.文件上传  4.文件下载   5.断点续传 现在将这些一一分享给大家 ,也欢迎大家一起学习和讨论  本例子采用AFNetWorking框架 网络检测: #pragma mark - Reachability Management (iOS 6-7) //网络监听(用于检测网络是否可以链接.此方法最好放于AppDelegate中,可以使程序打开便开始检测网络) - (void)

iOS开发之网络编程--5、NSURLSessionUploadTask+NSURLSessionDataDelegate代理上传

前言:关于NSURLSession的主要内容快到尾声了,这里就讲讲文件上传.关于文件上传当然就要使用NSURLSessionUploadTask,这里直接讲解常用的会和代理NSURLSessionDataDelegate一起搭配实现文件上传功能.另外,下面使用的文件上传思路是和NSURLConnection中本人之前的随笔<iOS开发之网络编程--使用NSURLConnection实现文件上传>提到的上传思路是一样的,都是要将请求信息拼接起来,然后传入到请求里进行上传.这个拼接过程是必要的,但

iOS开发之网络编程--2、NSURLSessionDownloadTask文件下载

本文内容大纲: 1.回顾NSURLSessionTask 2.NSURLSessionDownloadTask大文件之block下载 3.NSURLSessionDownloadTask大文件之代理方法下载 4.NSURLSessionDownloadTask大文件之代理方法实现断点续传下载 前言:如果读者是第一次阅读或者是学习关于本篇要介绍的NSURLSession的知识,最好先阅读本人前篇<iOS开发之网络编程--1.NSURLSession的基本使用>然后再学习本篇比较好. 1.回顾NS

iOS开发之网络-AFNetworking的使用

iOS开发之网络-AFNetworking 的使用 一.简介 AFNetworking 拥有良好的架构.丰富的API,以及模块化构建方式,使得使用起来非常轻松.它能够更好的处理向 Web 站点的请求,像处理 Session.Cookie 等问题的时候,使用 AFNetworking 是更好的选择. 通过 GitHub获取 AFNetworking. 二.使用步骤 ①

IOS开发之网络编程(请求数据和断点续传)

IOS开发中网络编程应用场景:JSON数据获取,网络数据的下载. 一:请求JSON数据一般用异步请求的方式,如果用同步请求,则会造成IOS界面的执行过程阻塞,即界面部分在请求数据的过程中必须等待数据加载完毕. JSON数据的获取步骤: 1.设置网络地址的字符串:NSString *URLString = @"http://www.baidu.com"; 2.创建URL:NSURL *URL = [NSURL URLWithString:URLString]; 3.创建请求:NSURLR