iOS中多线程的实现方案

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

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

(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

时间: 2024-10-19 13:37:44

iOS中多线程的实现方案的相关文章

iOS中多线程的实现方案_04_Block

一.Block 1.block定义 是准备好一段代码片段,在需要的时候执行 注意:block 是C语言的格式 2.block格式 格式:返回类型 (^blockName) (参数类型) = ^(形参列表) { 代码实现 }; 提示:如果没有参数,格式可以简化 格式:返回类型 (^blockName) () = ^ { 代码实现 }; 在Xcode中输入 inlineBlock,有提示,这是block格式的快捷方式 3.示例代码 (1)先看看block怎么用 void (^myBlock)() =

iOS中多线程的实现方案_05_GCD

一.基本概念 1.什么是GCD 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.任务和队列 (1)GCD中有2个核心概念 任务:执行什么操作 队列:用来存放任务 (2)GCD的使用

iOS中多线程知识总结(一)

这一段开发中一直在处理iOS多线程的问题,但是感觉知识太散了,所以就把iOS中多线程的知识点总结了一下. 1.基本概念 1)什么是进程?进程的特性是什么? 进程是指在系统中正在运行的一个应用程序.    特性: 每个进程之间都是独立的,每个进程都运行在其专用而且受保护的内存空间内. 2)什么是线程?线程和进程的关系是什么? 一个进程要想执行任务,必须要有线程(每一个进程至少要有一个线程),线程是进程的基本单元,一个进程中的所有任务都是在线程中执行 关系: 进程包含线程 3)什么叫多线程? 一个进

iOS中多线程基本概念

进程与线程 什么是进程? 近程是指在系统中正在运行的一个应用程序. 每个近程之间是独立的,每个近程均运行在其专用且受保护的内存空间内. **可以通过“活动监视器”可以查看Mac系统中所有开启的进程. 什么是线程? 一个进程要想执行任务,必须得有线程(每一个进程至少要有一条线程). 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行. 线程的串行 一个线程中任务的执行是串行(顺序执行的) 如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务. 也就是说,在同一时间内

iOS中多线程原理与runloop介绍

http://mobile.51cto.com/iphone-403490.htm iOS中多线程原理与runloop介绍 iPhone中的线程应用并不是无节制的,官方给出的资料显示iPhone OS下的主线程的堆栈大小是1M,第二个线程开始都是512KB.并且该值不能通过编译器开关或线程API函数来更改.只有主线程有直接修改UI的能力.……>>详细 兄弟专题:iOS人机交互指南之UI设计基础 1 iOS多线程编程知多少 在iOS的世界里有两种实现多线程的方式: 多线程是一个比较轻量级的方法来

iOS中多线程编程

转载此文作为笔记: iOS中多线程编程工具主要有: NSThread NSOperation GCD 这三种方法都简单易用,各有千秋.但无疑GCD是最有诱惑力的,因为其本身是apple为多核的并行运算提出的解决方案.虽然当前移动平台用双核的不多,但不影响GCD作为多线程编程的利器(ipad2已经是双核了,这无疑是一个趋势). http://www.cnblogs.com/scorpiozj/archive/2011/07/25/2116459.html GCD是和block紧密相连的,所以最好先

iOS 中多线程的简单使用

iOS中常用的多线程操作有( NSThread, NSopretion CGD ) 为了能更直观的展现多线程操作在SB中做如下的界面布局: 当点击下载的时候从网络上下载图片: - (void)loadImgFromURl{ NSURL *url=[NSURL URLWithString:@"https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&s

iOS中多线程_06_GCD其它用法

一.延时执行 1.iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) withObject:nil afterDelay:2.0]; // 2秒后再调用self的run方法 (2)使用GCD函数 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^

IOS中多线程的总结

首先要知道线程和进程的区别.一个系统上运行的每一个应用程序都是一个线程.而进程中要执行的任务都是在线程上来实现的,所以说线程是进程的最小执行单元. 进程最少要有一个线程.多线程,顾名思义就是多条线程. 那么在ios开发中运用到的多线程都有哪些呢,都有什么区别的,下面我们就来详细的吐槽一波. 说到多线程不得不提到POSix threads,简称PThreads.他是类Unix操作系统中管理线程的一套完整的API.具体的PThreads自己问一下性感迷人的度娘娘嘞!而Ios开发中我们碰到的线程管理具