iOS 开发笔记(线程)
2014-04-01 21:28
281 查看
//ios
多线程的实现方法
//1.runtime 实现多线程
//后台运行
某种方法
// [self performSelectorInBackground:@selector(syncLoadImage) withObject:Nil];//运行时编程的一种方式
//2.NSThread 线程类实现多线程
/*
*优点:1.最轻量级(CPU占用少) 2.最容易控制
*缺点:1.太繁琐 2.可读性差
*/
// NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(syncLoadImage) object:Nil];
//
// thread.name = @"name"; // 不会体现出来
//
// //开始线程
//
// [thread start];
//3.NSOperation
//OC层面的线程管理类
//优点:1.不需要关心线程同步,线程控制
//2.引入一个线程池/线程队列的概念
//1.
// NSInvocationOperation * operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(syncLoadImage) object:Nil];
//
// [operation start];
//2.
// NSBlockOperation * blockOperation = [NSBlockOperation blockOperationWithBlock:^{
//
// NSLog(@"========");
// [NSThread sleepForTimeInterval:2];
// NSLog(@"111111");
//
// }];
//
// [blockOperation start];
//3.线程池/线程队列
管理内存的所有线程
// 当一个线程执行完毕,将该线程挂起
// 如果有一个新任务,利用挂起的线程直接执行
// NSOperationQueue * queue = [[NSOperationQueue alloc]init];
//添加一个线程
// 1. [queue addOperation:添加一个队列]
//2.
// [queue addOperationWithBlock:^{
// NSLog(@"*******");
// }];
//
// [queue addOperationWithBlock:^{
// NSLog(@"123456789");
// }];
//
// [queue addOperationWithBlock:^{
// NSLog(@"哈哈哈");
// }];
//GCD
//1.产生一个队列(串行(主队列)
并行)
//获取主队列
dispatch_queue_t mainQueue =
dispatch_get_main_queue();
//在队列里运行方法
//第一个参数:在哪个队列里运行
//第二个参数:Block块里面写需要运行的方法
// dispatch_async(mainQueue, ^{
//
// for (int i = 0; i < 10000; i++) {
// NSLog(@"%d",i);
// }
//
// });
//
//
//
// dispatch_async(mainQueue, ^{
//
// for (int i = 0; i < 10000; i++) {
// NSLog(@"%d",i);
// }
//
// });
//2.获取全局队列(并行队列)
//第一个参数:选定全局队列的优先级:高/普通/低/后台
//第二个参数:苹果还没想好
dispatch_queue_t global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT ,0);
//
// dispatch_async(global, ^{
//
// for (int i = 0; i < 10000; i++) {
// NSLog(@"%d",i);
// }
//
// });
//
//
//
// dispatch_async(global, ^{
//
// for (int i = 10000; i > 1; i--) {
// NSLog(@"%d",i);
// }
//
// });
//自定义
队列
//第一个参数:队列的名字
//第二个参数:队列的属性
// static dispatch_once_t onceToken;
// dispatch_once(&onceToken, ^{
// 要执行的线程
// });
dispatch_queue_t queue = dispatch_queue_create("liuxin",
DISPATCH_QUEUE_CONCURRENT);
//并行
dispatch_queue_t queueSerial = dispatch_queue_create("liuxin2",
DISPATCH_QUEUE_SERIAL);
//串行
//
// dispatch_async(global, ^{
//
// NSURL * url = [NSURL URLWithString:@"http://img6.ngacn.cc/attachments/mon_201402/01/-447601_52ebef52f03dc.jpg"];
//
// NSData * data = [NSData dataWithContentsOfURL:url];
// UIImage * image = [UIImage imageWithData:data];
//
// //在全局队列中转到主队列执行UI操作
// dispatch_async(mainQueue, ^{
//
// self.imageView.image = image;
//
// });
//
//
// NSLog(@"1111");
//
// });
//GCD高阶用法
//1.使代码只运行一次(单例时使用
保证线程安全)
// static dispatch_once_t onceToken;
// dispatch_once(&onceToken, ^{
// NSLog(@"////////////");
// });
//
// //2.让代码等待一段时间在执行dispatch_af
回车
就出现如下代码块
//
// double delayInSeconds = 2.0;
// dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
// dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// NSLog(@"5555555555");
// });
//3.让代码执行多次
//第一个参数:要执行的次数
//第二个参数:在哪个队列中执行
//第三个参数:
dispatch_apply(5, queue, ^(size_t a) {
NSLog(@"%zu",a);
});
多线程的实现方法
//1.runtime 实现多线程
//后台运行
某种方法
// [self performSelectorInBackground:@selector(syncLoadImage) withObject:Nil];//运行时编程的一种方式
//2.NSThread 线程类实现多线程
/*
*优点:1.最轻量级(CPU占用少) 2.最容易控制
*缺点:1.太繁琐 2.可读性差
*/
// NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(syncLoadImage) object:Nil];
//
// thread.name = @"name"; // 不会体现出来
//
// //开始线程
//
// [thread start];
//3.NSOperation
//OC层面的线程管理类
//优点:1.不需要关心线程同步,线程控制
//2.引入一个线程池/线程队列的概念
//1.
// NSInvocationOperation * operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(syncLoadImage) object:Nil];
//
// [operation start];
//2.
// NSBlockOperation * blockOperation = [NSBlockOperation blockOperationWithBlock:^{
//
// NSLog(@"========");
// [NSThread sleepForTimeInterval:2];
// NSLog(@"111111");
//
// }];
//
// [blockOperation start];
//3.线程池/线程队列
管理内存的所有线程
// 当一个线程执行完毕,将该线程挂起
// 如果有一个新任务,利用挂起的线程直接执行
// NSOperationQueue * queue = [[NSOperationQueue alloc]init];
//添加一个线程
// 1. [queue addOperation:添加一个队列]
//2.
// [queue addOperationWithBlock:^{
// NSLog(@"*******");
// }];
//
// [queue addOperationWithBlock:^{
// NSLog(@"123456789");
// }];
//
// [queue addOperationWithBlock:^{
// NSLog(@"哈哈哈");
// }];
//GCD
//1.产生一个队列(串行(主队列)
并行)
//获取主队列
dispatch_queue_t mainQueue =
dispatch_get_main_queue();
//在队列里运行方法
//第一个参数:在哪个队列里运行
//第二个参数:Block块里面写需要运行的方法
// dispatch_async(mainQueue, ^{
//
// for (int i = 0; i < 10000; i++) {
// NSLog(@"%d",i);
// }
//
// });
//
//
//
// dispatch_async(mainQueue, ^{
//
// for (int i = 0; i < 10000; i++) {
// NSLog(@"%d",i);
// }
//
// });
//2.获取全局队列(并行队列)
//第一个参数:选定全局队列的优先级:高/普通/低/后台
//第二个参数:苹果还没想好
dispatch_queue_t global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT ,0);
//
// dispatch_async(global, ^{
//
// for (int i = 0; i < 10000; i++) {
// NSLog(@"%d",i);
// }
//
// });
//
//
//
// dispatch_async(global, ^{
//
// for (int i = 10000; i > 1; i--) {
// NSLog(@"%d",i);
// }
//
// });
//自定义
队列
//第一个参数:队列的名字
//第二个参数:队列的属性
// static dispatch_once_t onceToken;
// dispatch_once(&onceToken, ^{
// 要执行的线程
// });
dispatch_queue_t queue = dispatch_queue_create("liuxin",
DISPATCH_QUEUE_CONCURRENT);
//并行
dispatch_queue_t queueSerial = dispatch_queue_create("liuxin2",
DISPATCH_QUEUE_SERIAL);
//串行
//
// dispatch_async(global, ^{
//
// NSURL * url = [NSURL URLWithString:@"http://img6.ngacn.cc/attachments/mon_201402/01/-447601_52ebef52f03dc.jpg"];
//
// NSData * data = [NSData dataWithContentsOfURL:url];
// UIImage * image = [UIImage imageWithData:data];
//
// //在全局队列中转到主队列执行UI操作
// dispatch_async(mainQueue, ^{
//
// self.imageView.image = image;
//
// });
//
//
// NSLog(@"1111");
//
// });
//GCD高阶用法
//1.使代码只运行一次(单例时使用
保证线程安全)
// static dispatch_once_t onceToken;
// dispatch_once(&onceToken, ^{
// NSLog(@"////////////");
// });
//
// //2.让代码等待一段时间在执行dispatch_af
回车
就出现如下代码块
//
// double delayInSeconds = 2.0;
// dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
// dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// NSLog(@"5555555555");
// });
//3.让代码执行多次
//第一个参数:要执行的次数
//第二个参数:在哪个队列中执行
//第三个参数:
dispatch_apply(5, queue, ^(size_t a) {
NSLog(@"%zu",a);
});
相关文章推荐
- iOS开发笔记--线程
- ios开发笔记之 线程间通信
- iOS海哥开发笔记 (海哥原创,线程安全的几种加锁方法)
- 2011斯坦福大学iOS应用开发教程学习笔记(第五课)Protocols,手势识别
- IOS开发之Swift学习笔记
- iOS开发笔记之渐隐提示框
- iOS开发笔记 — Text、UI交互细节、两个动画效果等
- iOS开发笔记-json转字典
- iOS应用开发中实现页面跳转的简单方法笔记
- iOS海哥开发笔记 (海哥原创,绘图Quartz-2d的简单使用 二)
- iOS开发笔记23——iOS工程结构
- ios开发笔记-1-tableView
- IOS开发学习笔记015-block和protocol
- iOS开发笔记--先弄清楚这里的学问,再来谈iOS内存管理与优化(二)
- iOS 开发笔记和技巧总结 (三)
- iOS开发第一个轮回(C语言第6天笔记)
- 斯坦福大学iOS应用开发教程学习笔记
- iOS RTMP 视频直播开发笔记(4) ---- 视频清晰度 BP,EP,MP,HP
- IOS开发疑难杂症排查-线程创建排查
- iOS开发笔记12:iOS7上UITextField限制字数输入导致崩溃问题