ios 多线程



Iphone 中的多线程

 

    几十年前黑白的DOS系统,提示符慢慢跳动——这是一种简单的对话模式:系统是在等待一发出的指令--系统响应指令。此时的系统是一个单独的服务员,被命令做某件事的时候,他不会在对别的命令做出响应,直到把自己的命令完成。

但是随着硬件设备的不断发展,拥有内核以后,高效的资源的要求对原有的方式进行了调整,线程也应运而生。

    可以这样理解线程:将一份工作分开来做,独立运作。

那么为什么要用多线程呢?

     因为单一的线程已经不能满足需求,那就需要添加多个线程进行操作。线程的应用至少有一个主线程,如果在执行任务的时候,主线程开销比较大的时候,就可以给他添加一个子线程,来为主线程分担任务。

1NSThread:代表执行的线程,可以使用该类的对象分装线程操作。

2NSOperation:操作对象(Operation Object)的抽象基类,定义了人物的执行环境、状态等基本属性,继承该类来指定具体的操作。

3NSInvocationOperationNSOperation的子类,可以指定操作方法。

4NSOperationQueue:操作队列(Operation queue)的管理者,配合NSOperation的子类对象和NSInvocationOperation对象使用,通过添加操作对象完成并操作。

5NSRunLoop:表示程序的运行回路(RunLoop),该类的对象可以接受收到各种时间(如来自NSTimer的时间变化)的事件,协助程序对这些事件做出响应。

线程的实现方式

1NSThread创建线程

NSTread类提供的多线程,可以使用该类创建、管理线程。有以下3种方式可以实现。

(1)[NSTread detachNewThreadSelector:toTarget:withObject:nil];该方法的三个参数分别指定了线程的方法、目标和传递对象。

(2)创建NSTread对象,NSTread *_thread = [[NSTread alloc] initWithTarget:self selector:@selector(task) object:nil];      [_thread start];

(3)自定义NSTread对象        @interface myThread:NSThread    @implementation myThread        -(void)main{ // 在这里添加线程方法}    myThread *_thread = [[myThread alloc] init];     [myThread start];

2、线程的内存管理

NSAutoreleasePool类的实例管理所有被自动释放(autorelease)的对象。也就是说,当向一个对象发送autorelease消息后,该对象不会被立即释放,而是被放入NSAutoreleasePool实例中,当NSAutorelease实例被释放时,统一释放其中的所有对象,从而完成所谓的“自动释放”。工程中的主函数里,有系统自动创建的NSAutoreleasePool对象,供在主线程运行的对象使用,在创建其它线程的时候,NSAutorelease对象需要用户自己来创建、管理。不适用NSAutoreleasePool的后果是,系统中自动释放的对象无法被释放,像滚雪球一样越积越多,最终造成系统奔溃。

3、使用NSInvocationOperation 

 NSOperationQueue *queue =[ [NSOperation alloc] init];  [ququ  setMaxConcurrentOperationCount1]; //指定能够同时并发执行的操作个数     NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarger:self selector:@selector(task) object:nil];    [ququ  addOperation:op];  //将创建好的operation加入运行队列中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值