多线程(一)NSThread

iOS中多线程的实现方案:

技术 语言 线程生命周期 使用频率
pthread C 程序员自行管理 几乎不用
NSthread OC 程序员自行管理 偶尔使用
GCD C 自动管理 经常使用
NSOperation OC 自动管理 经常使用

线程的状态

NSThread的创建方式:

    //创建线程方式一
    NSThread *threadOne = [[NSThread alloc] initWithTarget:self selector:@selector(testAction) object:nil];
    //给线程命名
    threadOne.name = @"threadOne";
    //启动线程,在新开的线程执行testAction方法
    [threadOne start];

    //创建线程方式二,并且会自动启动
    [NSThread detachNewThreadSelector:@selector(testAction) toTarget:self withObject:nil];

    //创建线程方式三,隐式创建方式,自动启动
    [self performSelectorInBackground:@selector(testAction) withObject:nil];

调用的方法

- (void)testAction
{
    for (int i = 0; i < 3; i++)
    {
        NSLog(@"i = %d,当前线程 = %@",i,[NSThread currentThread]);
    }
}

结果:可以看到有3条线程并发执行

线程的属性:

    //创建一个线程
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(testAction) object:nil];
    //线程名字
    thread.name = @"wl";
    //线程优先级,一般情况不设置,默认0.5,数值范围0-1,数值越大优先级越高
    thread.threadPriority = 0.5;

常用方法,这些都是类方法,相对于这段代码所在的线程进行操作

    //获得主线程
    [NSThread mainThread];
    //判断是否为主线程,返回一个BOOL值
    BOOL isMainThread = [NSThread isMainThread];
    //判断是否为多线程,返回一个BOOL值
    BOOL isMultiThreaded = [NSThread isMultiThreaded];
    //把线程从可调度线程池中移除2s(阻塞线程)
    [NSThread sleepForTimeInterval:2];
    //把线程从可调度线程池中移除直到一个时间点(阻塞线程)
    [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]];
    //停止线程,线程死亡,这个线程就已经不存在了
    [NSThread exit];
时间: 2024-10-30 06:58:24

多线程(一)NSThread的相关文章

多线程 pthread + NSThread

多线程 pthread + NSThread pthread (C语言) · 规律: C语言中的数据类型一般都是以 _t或者Ref结尾 创建C语言的对象, 一般都用cretae#import <pthread/pthread.h>- (IBAction)btnOnClick:(id)sender { // 1.创建子线程/* 第1个参数:线程代号 (现场对象) 第2个参数:线程的属性 第3个参数:子线程需要执行的操作(调用的方法) void *(*)(void *) 返回值 (*指针名称)参数

多线程之-NSThread

多线程之-NSThread 2015.1.3 介绍NSThread之前先介绍一下pthread,仅供了解,一般在开发中用不到的 pthread(了解) 类型: C语言中类型的结尾通常 _t/Ref,而且不需要使用 * /* 参数说明: 1. pthread_t *restrict 线程代号的地址 2. const pthread_attr_t *restrict 线程的属性 3. 调用函数的指针 - void *(*)(void *) - 返回值 (函数指针)(参数) - void * 和 OC

iOS多线程-NSThread

本文转载自嘟嘟夜未央的博文:http://www.cnblogs.com/huluo666/p/3645889.html,修改了部分代码和贴图,如有侵犯版权请与我联系删除. 多线程这个概念的接触是蛮早的时候了,当时还是单核单CPU的时候,Thread这个概念已经出现了,当时比较流行的方案是时间片轮流,线程可以优先级抢占,但一次只能运行一个线程,实际上多线程是不能真正并行处理的,只是宏观上表现的多线程在齐头并进.现在硬件进步了很多,多核的CPU时代来临了,于是线程开始了真正意义上的并行处理,多线程

iOS开发多线程网络———NSThread

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); iOS开发多线程网络———NS

学习IOS开发网络多线程篇--NSThread/GCD/

NSThread:利用NSThread创建和启用一个线程 1. NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];,调用后调用[thread start]; 2. 创建线程后自动启动线程 ,[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil]; 3. 隐式创建

iOS多线程开发--NSThread NSOperation GCD

多线程 当用户播放音频.下载资源.进行图像处理时往往希望做这些事情的时候其他操作不会被中 断或者希望这些操作过程中更加顺畅.在单线程中一个线程只能做一件事情,一件事情处理不完另一件事就不能开始,这样势必影响用户体验.早在单核处理器时期 就有多线程,这个时候多线程更多的用于解决线程阻塞造成的用户等待(通常是操作完UI后用户不再干涉,其他线程在等待队列中,CPU一旦空闲就继续执行, 不影响用户其他UI操作),其处理能力并没有明显的变化.如今无论是移动操作系统还是PC.服务器都是多核处理器,于是“并行

iOS的三种多线程技术NSThread/NSOperation/GCD

1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的"并发"技术,使得程序员可以不再去关心线程的具体使用问题 NSOperation/NSOperationQueue 面向对象的线程技术 GCD -- Grand Central Dispatch(派发) 是基于C语言的框架,可以充分利用多核,是苹果推荐使用的多线程技术. 以上这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,

iOS多线程开发——NSThread浅析

在IOS开发中,多线程的实现方式主要有三种,NSThread.NSOperation和GCD,我前面博客中对NSOperation和GCD有了较为详细的实现,可以参考<iOS多线程开发--NSOperation/NSOperationQueue浅析><iOS多线程开发--GCD的使用与多线程开发浅析>.以及对于多线程中的同步异步,并行串行等概念,我在<GCD实践--串行队列/并发队列与iOS多线程详解>中也有较为详细的讲解.为了学习的完整性,今天我们主要从代码层面来实现

多线程&amp;NSObject&amp;NSThread&amp;NSOperation&amp;GCD

1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 2.NSOperation/NSOperationQueue 面向对象的线程技术 3.GCD —— Grand Central Dispatch(派发) 是基于C语言的框架,可以充分利用多核,是苹果推荐使用的多线程技术 以上这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的.但是就目

IOS多线程开发-NSThread原理及演示

// 创建线程方式1 - (void)test1 { // 实例化一个线程对像 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; // 让线程开始工作,启动线程, 在新开的线程执行run方法 [thread start]; } // 创建线程方式2 - (void)test2 { NSLog(@"---%@", [NSThread currentTh