首页 > 移动平台 > 详细

iOS中多线程的实现方案

时间:2014-08-21 20:59:34      阅读:374      评论:0      收藏:0      [点我收藏+]

我去, 好蛋疼, 刚刚写好的博客就因为手贱在触控板上右划了一下, 写的全丢了, 还得重新写, 博客园就没有针对这种情况的解决方案吗?都不想写了

 

一. iOS中多线程的实现方案有四种

bubuko.com,布布扣

(1) NSThread陷阱非常多, 有缺陷, 不过是OC的, 偶尔用一下

(2) GCD在苹果在iOS4推出的, 能充分利用设备的多核, 而且不用考虑线程, 性能比NSThread好的多

  GCD研究起来就比较深了, 所以在面试的时候会经常被问到

(3) NSOperation封装了很多使用的使用的功能, 某些情况下, GCD实现起来比较难的反而用NSOperation实现起来很简单, 苹果推荐大家使用NSOperation

  因为NSOperation封装的非常好, 所以使用起来非常简单, 没有什么技术难度, 在面试中就不怎么问

二. NSThread使用方法

NSThread使用起来简单, 比较灵活

(1)通用的方法:currentThread

NSThread *thread = [NSThread currentThread];

  当前线程, 在所有的(指NSThread\GCD\NSOpertion)多线程技术中都可以使用来获得当前线程

(2) 第一种方法, 最简单的一种

/** 不带参数的实例化initWithTarget方法 */

    // 1. 实例化线程对象, run 是一个耗时的任务,放在其他线程工作,就不会影响主线程了!
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
    
    // 2. 启动线程,会立即调用run方法
    [thread start];

  实例化一个线程对象, 把耗时任务放在其它线程

  必须start才会执行run方法

/** 带参数的实例化initWithTarget方法 */

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"hehe"];
    thread.name = @"thread initWithTarget";

注意, 带参数@selector(run:)加冒号

可以设置thread对象的name属性

(3) 第二种方法

/** 不带参数的detach方法 */

[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
- (void)run

  会立即启动新的线程, 运行run方法

/** 带参数的detach方法 */

    // object是调用方法的第一个参数
    [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"hello"];
- (void)run:(id)obj

注意, 带参数@selector(run:)加冒号

(4) 第三种方法

iOS中多线程的实现方案,布布扣,bubuko.com

iOS中多线程的实现方案

原文:http://www.cnblogs.com/yudigege/p/3927898.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!