IOS多线程_NSThread和NSInvocationOperation

//虽然现在在多线程方面大多都在用GCD,当其他方式我们还是应该有所了解,给大家介绍一下NSThread和NSInvocationOperation的简单用法

@interface
yxpViewController ()

{

UIImageView *_imageView;

//声明一个队列

NSOperationQueue *_operationQueue;

}

@end

@implementation yxpViewController

- (void)viewDidLoad

{

[super
viewDidLoad];

//初始化操作队列

_operationQueue = [[NSOperationQueue
alloc]
init];

//在这里限定了该队列只同时运行一个线程

[_operationQueue
setMaxConcurrentOperationCount:1];

//初始化一_ImageView

_imageView=[[UIImageView
alloc] initWithFrame:CGRectMake(10,
70,
300, 450)];

_imageView.backgroundColor=[UIColor
grayColor];

_imageView.animationDuration=3.0;

_imageView.animationRepeatCount=0;

[self.view
addSubview:_imageView];

//下面两种方法添加一个线程

//创建一个NSInvocationOperation对象,并初始化到方法

//在这里,selector参数后的值是你想在另外一个线程中运行的方法(函数,Method)

//在这里,object后的值是想传递给前面方法的数据

NSInvocationOperation* theOp = [[NSInvocationOperation
alloc]
initWithTarget:self

selector:@selector(addTaskMethod:)
object:_imageView];

// Operation加入到队列中

[_operationQueue
addOperation:theOp];

//[NSThread detachNewThreadSelector:@selector(addTaskMethod:) toTarget:self withObject:nil];

}

// 运行另外一个线程的方法

- (void)addTaskMethod:(id)data

{

NSString *url1=@"http://h.hiphotos.baidu.com/image/w%3D230/sign=b2d5c289123853438ccf8022a311b01f/91ef76c6a7efce1b1ae9f92fad51f3deb58f6510.jpg";

NSString *url2=@"http://h.hiphotos.baidu.com/image/pic/item/d058ccbf6c81800aae834e8bb33533fa838b47d5.jpg";

NSString *url3=@"http://d.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494eec3ba65132ff5e0fe99257e1b.jpg";

NSString *url4=@"http://g.hiphotos.baidu.com/image/pic/item/a6efce1b9d16fdfa81f4ace4b68f8c5494ee7b1b.jpg";

NSString *url5=@"http://g.hiphotos.baidu.com/image/pic/item/d6ca7bcb0a46f21f70031fdbf4246b600c33ae07.jpg";

NSArray *array=[[NSArray
alloc] initWithObjects:url1,url2,url3,url4,url5,
nil];

NSMutableArray *imageArray=[[NSMutableArray
alloc]
initWithCapacity:20];

for (NSString *string
in array) {

UIImage *image=[self
getImageFromURL:string];

[imageArray
addObject:image];

}

_imageView.animationImages=imageArray;

//回到主线程调用 在非线程中不能调用有关UI线程(主线程)的方法的,你可以直接调用一下看是否有效

[self
performSelectorOnMainThread:@selector(startImageViewAnimating)
withObject:nil
waitUntilDone:YES];

}

- (void)startImageViewAnimating

{

[_imageView 
startAnimating];

}

//下载图片的方法

-(UIImage *) getImageFromURL:(NSString *)fileURL {

NSLog(@"执行图片下载函数");

UIImage * result;

NSData * data = [NSData
dataWithContentsOfURL:[NSURL
URLWithString:fileURL]];

result = [UIImage
imageWithData:data];

return result;

}

- (void)didReceiveMemoryWarning

{

[super
didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

IOS多线程_NSThread和NSInvocationOperation

时间: 2024-10-14 21:07:07

IOS多线程_NSThread和NSInvocationOperation的相关文章

iOS多线程编程

1. 进程,线程, 任务 进程:一个程序在运行时,系统会为其分配一个进程,用以管理他的一些资源. 线程:进程内所包含的一个或多个执行单元称为线程,线程一般情况下不持有资源,但可以使用其所在进程的资源. 任务:进程或线程中要做的事情. 在引入线程的操作系统中,通常把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位. 线程比进程更小,对其调度的开销小,能够提高系统内多个任务的并发执行程度. 一个程序至少有一个进程,一个进程至少有一个线程.一个程序就是一个进程,而一个程序中的多个任

关于iOS多线程的总结

关于iOS多线程的总结 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例,在实际使用中感受它们的区别.还有一点需要说明的是,这篇文章将会使用 Swift 和 Objective-c 两种语言讲解,双语幼儿园.OK,let's begin! 概述 这篇文章中,我不会说多线程是什么.线程和进程的区别.多线程有什么用,当然我也不会说什么是串行.什么是并行等问题,这些我们应该都知道的. 在 iOS 中其实目前有 4 套多线程方案,他们分

iOS 多线程详解

iOS开发 多线程 概览 机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行.改变这种状况可以从两个角度出发: 对于单核处理器,可以将多个步骤放到不同的线程,这样一来用户完成UI操作后其他后续任务在其他线程中,当CPU空闲时会继续执行,而此时对于用户而言可以继续进行其他操作: 对于多核处理器,如果用户在UI线程中完成某个操作之后,其他后续操作在别的线程中继续执行,用户同样可以继续进行其他UI操作,与此同时前一个操作的后续任务可以分散到多个空闲CPU中继续执行(当然具体调度顺序要根据

iOS多线程与网络开发之多线程概述

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 游戏官方下载:http://dwz.cn/RwTjl 游戏视频预览:http://dwz.cn/RzHHd 游戏开发博客:http://dwz.cn/RzJzI 游戏源码传送:http://dwz.cn/Nret1 A.进程 什么是进程进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行

iOS多线程 NSThread/GCD/NSOperationQueue

http://www.cnblogs.com/kenshincui/p/3983982.html iOS开发系列--并行开发其实很容易 2014-09-20 23:34 by KenshinCui, 9738 阅读, 19 评论, 收藏,  编辑 --多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行.改变这种

iOS多线程杂论

iOS多线程的分布 (1) NSThread (2) NSOperation (3) GCD 现在对下面三个进行一个个的分析,希望那里说得不对的地方希望简友们帮我指点一二. 1,NSThread 优点:NSThread相对比较轻量级缺点:需要自己管理线程生命周期,线程同步,线程同步对数据加锁有一定的系统开销: NSThread 实现的三种方式: 1,NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selecto

iOS 多线程技术2

iOS 多线程技术2 NSOperation NSInvocationOperation //创建一个队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; //创建子任务,定义子任务必须是 NSOperation 的子类 NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(dosome

iOS 多线程学习笔记 —— NSOperation

本文复制.参考自文章:iOS多线程编程之NSOperation和NSOperationQueue的使用 ,主要为了加强个人对知识的理解和记忆,不做他用.原作者声明: 著作权声明:本文由http://blog.csdn.net/totogo2010/原创,欢迎转载分享.请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢! 这里对原作者的辛勤工作表示感谢! 1. 使用抽象的 NSOperation 的方式有两种: (1)用库定义好的子类: NSInvocationOperation 和 NSBlo

iOS多线程编程之NSOperation和NSOperationQueue的使用(转自容芳志专栏)

转自由http://blog.csdn.net/totogo2010/ 使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也熟悉Java,NSOperation就和java.lang.Runnable接口很相似.和Java的Runnable一样,NSOperation也是设计用来扩展的,只需继承重写NSOperation的一个方法main.相当与ja