iOS开发多线程

- (void)viewDidLoad {

[super viewDidLoad];

/*进程:正在运行的程序 线程:进程的基本执行单元,任务执行的地方

线程的串行:1个线程中任务的执行时串行的,同一时间,1个线程只能只能执行一个任务

多线程:1个进程中可以开启多个线程,原理是CPU快速地在多条线程之间调度(切换),多了CPU吃不消

主线程/UI线程:显示/刷新/处理UI,把耗时的处理放到子线程*/

/*创建线程

手动启动线程:[thread start] 接着就会执行任务

NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(text) object:nil];

自动启动线程:

[NSThread detachNewThreadSelector:@selector(text) toTarget: withObiect:]

隐式创建并启动:

[self performSelectorInBackground:@selector(text) withObject:]

获取主线程

NSThread *mainThread = [NSThread mainThread];

判断是否是主线程

BOOL *b = [mainThread isMainThread];

获取当前线程

NSThread *currentThread = [NSThread currentThread];

线程调度的优先级

+(double)threadPriority;

+(BOOL)setThreadPriority:(double)p;

设置线程的名字

-(void)setName:(NSString *)n;

-(NSString *)name;

退出线程:+exit

*/

/*线程安全:一块资源可能会被多个线程访问,容易引发数据错乱和数据安全问题

解决:线程同步技术,互斥锁 @synchronized(锁对象){//需要锁定的代码}

一个时间段只有一个线程能访问,直到该线程完事

atomic:原子属性,线性安全,为setter方法加锁

*/

/*线程间的通信:线程之间传递数据,传递任务

-(void)performSelectorOnMainThread: withObject: waitUntilDone:

-(void)performSelector: onThread: withObiect: waitUntilDone:

*/

/*线程的堵塞(调用sleep方法或者是同步锁,此时线程不可被调度):

第一种 [NSThread sleepForTimeInterval:2.0];

第二种 以当前时间为基准NSDate *date = [NSDate dateWithTimeIntervalSinceNow:4.0];

[NSThread sleepUntilDate:date];

线程的死亡:任务结束 发生异常 强制退出

创建了线程,但是线程不会立刻开启!!!!

*/

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

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

{

[self performSelectorInBackground:@selector(download) withObject:nil];

}

-(void)download

{   //获得一张图片

NSString *imageStrring = [NSString stringWithFormat:@"http://i6.topit.me/6/5d/45/1131907198420455d6o.jpg"];

NSURL *imageUrl = [NSURL URLWithString:imageStrring];

NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];

UIImage *image = [UIImage imageWithData:imageData];

//返回主线程 第二个是要传到这个方法中的参数

[self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];

}

-(void)settingImage:(UIImage *)image

{

self.imageView.image = image;

}

//

//- (IBAction)buttonClicked:(id)sender {

//    NSThread *currentThread = [NSThread currentThread];

//    NSLog(@"currentThread----%@",currentThread);

//    NSThread *mainThread = [NSThread mainThread];

//    NSLog(@"mainThread-----%@",mainThread);

//    [self creatNewThread];

//

//}

//-(void)creatNewThread

//{

//    NSThread *newThread = [[NSThread alloc]initWithTarget:self selector:@selector(run) object:nil];

//   newThread.name = @"线程A";

//    [newThread start];

//}

//-(void)run

//{   NSThread *current = [NSThread currentThread];

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

//        NSLog(@"run---%@",current);

//    }

//}

时间: 2024-10-07 07:36:46

iOS开发多线程的相关文章

iOS开发多线程篇—线程的状态

iOS开发多线程篇—线程的状态 一.简单介绍 线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil]; 说明:创建线程有多种方式,这里不做过多的介绍. 线程的开启: [self.thread start]; 线程的运行和阻塞: (1)设置线程阻塞1,阻塞2秒 [NSThread sleepForTimeInterval:2.0]; (2)第二种设置线程阻塞2,以当前时

iOS开发多线程之自定义NSOperation

iOS开发多线程篇—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewController. 1 // 2 // YYViewController.h 3 // 01-自定义Operation 4 // 5 // Created by apple on 14-6-26. 6 // Copyright (c) 2014年 itcase. All rig

iOS开发多线程篇—自定义NSOperation

iOS开发多线程篇—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewController. 1 // 2 // YYViewController.h 3 // 01-自定义Operation 4 // 5 // Created by apple on 14-6-26. 6 // Copyright (c) 2014年 itcase. All rig

iOS开发多线程篇 09 —NSOperation简单介绍

iOS开发多线程篇—NSOperation简单介绍 一.NSOperation简介 1.简单说明 NSOperation的作?:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: (1)先将需要执行的操作封装到一个NSOperation对象中 (2)然后将NSOperation对象添加到NSOperationQueue中 (3)系统会?动将NSOperationQueue中的NSOpe

iOS开发多线程篇 05 —GCD介绍

iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.提示 (1)GCD存在于libdispatch.dylib这个库中

iOS开发多线程篇—多线程简单介绍

iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行 3.线程

iOS开发多线程篇—多线程的的相关概念(1)

iOS开发多线程篇-多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过"活动监视器"可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行

IOS开发——多线程编程

1."省电,流畅,优质应用,响应速度快,用户体验好--"也许是众多用户眼中的苹果系统. 2.在众手机商拼CPU主频,拼4核,8核的年代,苹果依然坚持双核,iphone用户体验仍然坚挺. 以上两点IOS是如何优化,在续航,流畅度和响应速度上完胜安卓,答案就是多线程&RunLoop... RunLoop是IOS事件响应与任务处理最核心机制,它贯穿IOS整个系统运作. RunLoop不像一般的线程循环等待任务,传统的线程循环等待任务会导致CPU时间被占用,虽然你设置了睡眠时间,但很多

iOS开发多线程篇—GCD的基本使用

iOS开发多线程篇—GCD的基本使用 一.主队列介绍 主队列:是和主线程相关联的队列,主队列是GCD自带的一种特殊的串行队列,放在主队列中得任务,都会放到主线程中执行. 提示:如果把任务放到主队列中进行处理,那么不论处理函数是异步的还是同步的都不会开启新的线程. 获取主队列的方式: dispatch_queue_t queue=dispatch_get_main_queue(); (1)使用异步函数执行主队列中得任务,代码示例: 1 // 2 // YYViewController.m 3 //

iOS开发多线程篇 10 —NSOperation基本操作

iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执?行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. (3)最?大并发数的相关?方法 - (NSInteger)maxConcurrentOperationCount;- (void)setMaxConcurrentOperationCount:(NSInteger)cnt; 说明:如果没有设置最大并发数,那么并发的个数是由系统内存和CPU决定的,可能