background image

iOS 中多线程原理与 runloop 介绍

.线程概述

有些程序是一条直线,起点到终点;有些程序是一个圆,不断循环,直到将它切断。直线的

如简单的

Hello World,运行打印完,它的生命周期便结束了,像昙花一现那样;圆如操作系

统,一直运行直到你关机。

 

一个运行着的程序就是一个进程或者叫做一个任务,一个进程至少包含一个线程,线程就

是程序的执行流。

Mac 和 iOS 中的程序启动,创建好一个进程的同时, 一个线程便开始运

行,这个线程叫主线程。主线程在程序中的地位和其他线程不同,它是其他线程最终的父线

程,且所有界面的显示操作即

AppKit 或 UIKit 的操作必须在主线程进行。 

系统中的每一个进程都有自己独立的虚拟内存空间,而同一个进程中的多个线程则共用进

程的内存空间。每创建一个新的线程,都需要一些内存

(如每个线程有自己的 Stack 空间)和

消耗一定的

CPU 时间。另外当多个线程对同一个资源出现争夺的时候需要注意线程安全问

题。

 

.创建线程

创建一个新的线程就是给进程增加了一个执行流,执行流总得有要执行的代码吧,所以新

建一个线程需要提供一个函数或者方法作为线程的入口。

1.使用 NSThread

NSThread 提供了创建线程的途径,还可以提供了检测当前线程是否是主线程的方法。 使用

NSThread 创建一个新的线程有两种方式:

1.创建一个 NSThread 的对象,调用其 start 方法。对于这种方式的 NSThread 对象的

创建,可以使用一个目标对象的方法初始化一个

NSThread 对象,或者创建一个继承

NSThread 类的子类,实现其 main 方法,然后在直接创建这个子类的对象。

2.使用 detachNewThreadSelector:toTarget:withObject:这个类方法创建一个线程,这

个比较直接了,直接使用目标对象的方法作为线程启动入口。

                   找软件资料,就到一览软件文库

http://wk.yl1001.com/rj/