多线程之 NSOperation 与 NSOperationQueue 的基本操作 适合基础学习
来源:互联网 发布:赵薇事件 知乎 编辑:程序博客网 时间:2024/06/16 11:10
使用NSOperation 与 NSOperationQueue实现多线程编程 的详解
1 先将需要执行的操作封装到一个NSOperation对象中
2 然后将NSOperation对象添加到NSOperationQueue中
3 系统会自动将NSOperation中封装的操作放到一条新线程中执行此过程你根本不需要考虑生命周期,同步,加锁问题等;
NSOperation步骤;
NSOperation并不具备封装操作的能力,必须使用它的子类,使用NSOperation子类的方式有3种:
1> NSInvocationOperation
2> NSBlockOperation
3> 自定义子类继承NSOperation,实现内部相应的方法
NSOperationQueue操作是可以把线程封装起来;不是同步是异步获取数据,也不需要考虑生命周期
- (void)viewDidLoad
{
[superviewDidLoad];
[selfloadOperation];
}
//把封装的线程数据添加到队列中
- (void)loadOperation
{
NSOperationQueue *queue = [[NSOperationQueuealloc] init];
NSBlockOperation *operation1 = [NSBlockOperationblockOperationWithBlock:^{
NSLog(@"operation1%@",[NSThreadcurrentThread]);
}];
NSBlockOperation *operation2 = [NSBlockOperationblockOperationWithBlock:^{
NSLog(@"operation2%@",[NSThreadcurrentThread]);
}];
//一个NSOperation被添加到队列中会马上执行操作(异步执行)
//1 往2 中添加依赖 那么2 是提前执行
[operation1addDependency:operation2];
[queueaddOperation:operation1];
[queueaddOperation:operation2];
}
//创建了异步线程
- (void)loadNSOperationQueue
{
//使用消息队列封装了线程
NSOperationQueue *queue = [[NSOperationQueuealloc] init];
[queue addOperationWithBlock:^{
NSLog(@"%@",[NSThreadcurrentThread]);
}];
[queue addOperationWithBlock:^{
NSLog(@"%@",[NSThreadcurrentThread]);
}];
[queue addOperationWithBlock:^{
NSLog(@"%@",[NSThreadcurrentThread]);
}];
[queue addOperationWithBlock:^{
NSLog(@"%@",[NSThreadcurrentThread]);
}];
//同时只允许一条线程运行
[queue setMaxConcurrentOperationCount:1];
//取消queue中所有的操作
//[queue cancelAllOperations];
}
//创建了一条线程 方式一 同步的
- (void)loadInvocationOperation
{
NSInvocationOperation *operation = [[NSInvocationOperationalloc] initWithTarget:selfselector:@selector(run)object:nil];
NSLog(@"operation%@" ,[NSThreadcurrentThread]);
//执行完调用的;
operation.completionBlock = ^(){
NSLog(@"执行完毕");
};
//开启线程
[operationstart];
}
//取消操作
//[operation cancel];
//创建了一条线程 方式一
- (void)loadBlockOperation
{
NSBlockOperation *block = [NSBlockOperation
blockOperationWithBlock:^(){
NSLog(@"执行第1次操作,线程:%@", [NSThread currentThread]);
}];
//封装数据操作
[block addExecutionBlock:^(){
NSLog(@"YOU执行第1次操作,线程:%@", [NSThread currentThread]);
}];
[block addExecutionBlock:^(){
NSLog(@"YOU执行第1次操作,线程:%@", [NSThread currentThread]);
}];
[blockaddExecutionBlock:^(){
NSLog(@"YOU执行第1次操作,线程:%@", [NSThread currentThread]);
}];
//开启线程
[blockstart];
}
- (void)run
{
NSLog(@"run%@",[NSThreadcurrentThread]);
}
- 多线程之 NSOperation 与 NSOperationQueue 的基本操作 适合基础学习
- iOS多线程之NSOperation与NSOperationQueue的使用
- 《多线程之NSOPeration/NSOperationQueue》
- 多线程之四:NSOperation与NSOperationQueue
- 多线程之NSOperation和NSOperationQueue
- iOS多线程之NSOperation/NSOperationQueue
- iOS学习笔记-119.多线程18——NSOperationQueue自定义NSOperation执行一个操作的取消
- NSOperation,NSOperationQueue基本的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- IOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用 .
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- Java多线程
- Android 微信SDK分享功能中的最全过程步骤分析
- 使用layout_weight使控件按比例填满父控件
- 交换机的堆叠与级连的区别
- 树形dp ,求最大路径权值,最长路径
- 多线程之 NSOperation 与 NSOperationQueue 的基本操作 适合基础学习
- ALV的html表头
- hibernate各种条件查询汇总(对象、单字段、多字段等)
- 嵌入式系统程式设计重要抉择
- Markdown入门指北
- java.lang.VerifyError: Inconsistent stackmap frames at branch target
- redo文件大小与insert速度
- iOS开发之AVAudioPlayer 音频播放
- JS调用Webservice