NSOperationQueue简介
typedef enum
{
RequestStateReady = 0,
RequestStateExecuting,
RequestStateFinished
}RequestState;
@interface RequestOperation ()
@property(nonatomic,strong) NSURLConnection *connection;
@property(nonatomic,strong) NSMutableData *resultData;
@property(nonatomic,assign) RequestState requestState;
@end
@implementation RequestOperation
-(id)init{
self = [super init];
if (self) {
[self willChangeValueForKey:@"isReady"];
self.requestState = RequestStateReady;
[self didChangeValueForKey:@"isReady"];
}
return self;
}
#pragma mark - Operation实现父类方法
-(void)start{
[self exeRequest];
}
-(BOOL)isConcurrent{
return YES;
}
-(BOOL)isReady{
return self.requestState == RequestStateReady && [super isReady];
}
-(BOOL)isExecuting{
return self.requestState == RequestStateExecuting;
}
-(BOOL)isFinished{
return self.requestState == RequestStateFinished;
}
#pragma mark - 发起请求
-(void)exeRequest{
if (self.isCancelled == YES || self.isFinished == YES) {
return;
}
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.baidu.com/"]];
self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[self.connection start];
[[NSRunLoop currentRunLoop] run];
[self willChangeValueForKey:@"isExecuting"];
self.requestState = RequestStateExecuting;
[self didChangeValueForKey:@"isExecuting"];
}
#pragma mark - 请求代理实现
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
self.resultData = [[NSMutableData alloc] initWithCapacity:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[self.resultData appendData:data];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
[self willChangeValueForKey:@"isFinished"];
self.requestState = RequestStateFinished;
[self didChangeValueForKey:@"isFinished"];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
[self willChangeValueForKey:@"isFinished"];
self.requestState = RequestStateFinished;
[self didChangeValueForKey:@"isFinished"];
}
@end
NSOperationQueue简介相关推荐
- iOS多线程:『NSOperation、NSOperationQueue』详尽总结
2019独角兽企业重金招聘Python工程师标准>>> iOS多线程:『NSOperation.NSOperationQueue』详尽总结 转载: 原地址https://www.ji ...
- 多线程编程3 - NSOperationQueue
一.简介 一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的.也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步 ...
- iOS 高大上函数响应式编程框架ReactiveCocoa学习笔记1 简介
ReactiveCocoa函数响应式编程 一.简介 ReactiveCocoa(其简称为RAC)是函数响应式编程框架.RAC具有函数式编程和响应式编程的特性.它主要吸取了.Net的 Reactive ...
- etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...
- Docker学习(一)-----Docker简介与安装
一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
- TensorRT简介
TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...
- 谷粒商城学习笔记——第一期:项目简介
一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...
- 通俗易懂的Go协程的引入及GMP模型简介
本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...
最新文章
- Node.js in IIS — Hello World
- 如何设置Reporting Services链接到网页URL的参数?
- andengine游戏引擎总结基础篇
- 脑洞大开的机器视觉多领域学习模型结构 | CVPR 2018论文解读
- Fiori offline support : overrideRefreshHandling and injectRefreshList
- 英语口语 week11 Friday
- strace调试(Linux Device Driver)
- leetcode - 213. 打家劫舍 II
- jqurey ajax 的动态添加二级联动下拉菜单
- Arduino ISP下载接口
- 软件工程复习之rup
- 谷歌地图网页版_如何在网站嵌入谷歌地图
- 智能网联汽车OTA升级安全设计
- 这次的新计算,很全能!
- node下载文件 解压压缩包
- freeswitch通过limit限制cps
- 研究生发论文的流程?
- 如果一份工作让你时常感到焦虑,你会不会立马辞职?
- CP Editor安装配置
- Android仿头条频道管理
热门文章
- Python+selenium第一个自动化脚本
- Openstack Havana的两个排错过程
- Ubuntu桌面培训(Ubuntu Desktop Course)中文译本发布
- 数据结构与算法——哈希表与字符串
- Unity3D-InstantOC遮挡剔除
- vb.net读取excel并写入dgv_读取PDF中的表格写入EXCEL?30行代码搞定
- linux非权限安装bioperl,Bioperl的简单安装
- matlab编程实现二进制树搜索,数据结构: 二进制搜索树(用C语言实现)
- java游戏应龙女魃转世_应龙和女魃的凄美爱情,究竟是爱情,还是阴谋?
- 判断表达式值是否为空_如何在 Python 中判断列表是否为空