您的位置:首页 > 移动开发 > IOS开发

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提供了一些新特性支持多核并行编程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: