iOS多线程开发
2016-05-11 14:51
246 查看
为什么使用多线程开发
每个iOS应用程序都有个专门用来更新显示UI界面、处理用户触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验。一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行,多线程编程是防止主线程堵塞,增加运行效率的最佳方法。
多线程的优点:
1、可以把比较耗时的操作放到后台执行(如图片、视频的下载),防止主线程堵塞。
2、发挥多核处理器的优势,并发执行让程序运行的更快,更流畅,用户体验更好
多线程的缺点:
1、大量的线程降低了代码的可读性
2、每创建一个新的线程,都会消耗一定内存和CPU时间
3、当多个线程出现对同一个资源进行争夺时,可能会出现线程安全问题
注意:
共享资源的“争夺”
多线程使用是为了同步完成多个任务,不是为了提高运行的效率,而是为了通过提高资源使用效率来提高系统的性能
线程的使用不是无节制的
iOS中的主线程的堆栈大小是1M,其他的子线程都是512K,这些数值是不能通过编辑器开关或者线程API更改的
只有主线程有直接修改UI的能力
线程的定义及线程和进程的区别和联系可参照:
http://www.cnblogs.com/llhlj/p/7345957.html
iOS多线程的几种实现方式
1、Pthreads
2、NSThread
3、GCD
4、NSOperation
Pthreads
POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。
简单地说,这是一套在很多操作系统上都通用的多线程API,所以移植性很强(然并卵),当然在 iOS 中也是可以的。不过这是基于 c语言 的框架,使用起来这酸爽!感受一下:
导入头文件
#import <pthread/pthread.h>
创建线程并执行任务
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
pthread_t thread;
//创建一个线程并自动执行
pthread_create(&thread, NULL, start, NULL);
}
void *start(void *data) {
NSLog(@"%@", [NSThread currentThread]);
return NULL;
}
NSThread
这种方法需要管理线程的生命周期、同步、加锁问题,会导致一定的性能开销
NSOperation和NSOperationQueue
是基于OC实现的。NSOperation以面向对象的方式封装了需要执行的操作,然后可以将这个操作放到一个NSOperationQueue中去异步执行。不必关心线程管理、同步等问题
Grand Central Dispatch
简称GCD,ios4开始支持,是纯C语言的API,自iPad2开始,苹果设备开始有了双核CPU,为了充分使用双核,GCD提供了一些新特性支持多核并行编程
每个iOS应用程序都有个专门用来更新显示UI界面、处理用户触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验。一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行,多线程编程是防止主线程堵塞,增加运行效率的最佳方法。
多线程的优点:
1、可以把比较耗时的操作放到后台执行(如图片、视频的下载),防止主线程堵塞。
2、发挥多核处理器的优势,并发执行让程序运行的更快,更流畅,用户体验更好
多线程的缺点:
1、大量的线程降低了代码的可读性
2、每创建一个新的线程,都会消耗一定内存和CPU时间
3、当多个线程出现对同一个资源进行争夺时,可能会出现线程安全问题
注意:
共享资源的“争夺”
多线程使用是为了同步完成多个任务,不是为了提高运行的效率,而是为了通过提高资源使用效率来提高系统的性能
线程的使用不是无节制的
iOS中的主线程的堆栈大小是1M,其他的子线程都是512K,这些数值是不能通过编辑器开关或者线程API更改的
只有主线程有直接修改UI的能力
线程的定义及线程和进程的区别和联系可参照:
http://www.cnblogs.com/llhlj/p/7345957.html
iOS多线程的几种实现方式
1、Pthreads
2、NSThread
3、GCD
4、NSOperation
Pthreads
POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。
简单地说,这是一套在很多操作系统上都通用的多线程API,所以移植性很强(然并卵),当然在 iOS 中也是可以的。不过这是基于 c语言 的框架,使用起来这酸爽!感受一下:
导入头文件
#import <pthread/pthread.h>
创建线程并执行任务
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
pthread_t thread;
//创建一个线程并自动执行
pthread_create(&thread, NULL, start, NULL);
}
void *start(void *data) {
NSLog(@"%@", [NSThread currentThread]);
return NULL;
}
NSThread
这种方法需要管理线程的生命周期、同步、加锁问题,会导致一定的性能开销
NSOperation和NSOperationQueue
是基于OC实现的。NSOperation以面向对象的方式封装了需要执行的操作,然后可以将这个操作放到一个NSOperationQueue中去异步执行。不必关心线程管理、同步等问题
Grand Central Dispatch
简称GCD,ios4开始支持,是纯C语言的API,自iPad2开始,苹果设备开始有了双核CPU,为了充分使用双核,GCD提供了一些新特性支持多核并行编程
相关文章推荐
- iOS 不规则瀑布流
- IOS中获取各种文件的目录路径的方法
- iOS 理解证书与描述文件
- ios layer图层排序
- IOS 的 KVO机制
- IOS 解决后台计数器不准确问题
- iOS 自定义视频播放器
- iOS设备唯一标识符
- IOS开发 视图重叠时设置交互的优先级__userInteractionEnabled用户交互
- iOS 音乐
- ios导航栏rightBarButtonItems多个按钮自定义设置
- MLeaksFinder:精准 iOS 内存泄露检测工具
- IOS开发教程01
- 不要在init和dealloc函数中使用accessor
- 《Motion Design for iOS》(十五)
- iOS学习笔记5-推送(信鸽推送)
- iOS给Navigation的BarButton的加消息提醒角标
- ios9 crash animateWithDuration
- iOS-顶部提示框源码分享,在顶部弹出提示框
- IOS开发各种加解密,编解码