OS中多线程的实现方案:

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

线程的状态

NSThread的创建方式:

1
2
3
4
5
6
7
8
9
10
11
12
//创建线程方式一
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];

调用的方法

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

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

线程的属性:

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

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

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

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

  1. iOS开发之多线程(NSThread、NSOperation、GCD)

    整理一些多线程相关的知识. 并行 & 并发 1.并行:并行是相对于多核而言的,几个任务同时执行.2.并发:并发是相对于单核而言的,几个任务之间快速切换运行,看起来像是"同时" ...

  2. iOS开发——多线程篇——NSThread

    一.基本使用1.创建和启动线程一个NSThread对象就代表一条线程 创建.启动线程NSThread *thread = [[NSThread alloc] initWithTarget:self s ...

  3. 多线程技术 NSThread & NSOperation & GCD

    多线程:在iOS开发中,用到多线程的处理问题的时候有很多,比如异步下载数据时刷新界面等等. 引入多线程来处理问题的关键就是,基于多线程可以使界面更加流畅,防止界面假死. 界面假死:比如你单击一个按钮来 ...

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

    1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的"并发"技术,使得程序员可以不再去关心 ...

  5. 多线程&NSObject&NSThread&NSOperation&GCD

    1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 2.NSOperation/NS ...

  6. iOS多线程开发--NSThread NSOperation GCD

    多线程 当用户播放音频.下载资源.进行图像处理时往往希望做这些事情的时候其他操作不会被中 断或者希望这些操作过程中更加顺畅.在单线程中一个线程只能做一件事情,一件事情处理不完另一件事就不能开始,这样势 ...

  7. 多线程(NSThread、NSOperation、GCD)编程浅谈

    一.基本概念 进程:一个具有一定独立功能的程序关于某个数据集合的一次运行活动.可以理解成一个运行中的应用程序.线程:程序执行流的最小单元,线程是进程中的一个实体.同步:只能在当前线程按先后顺序依次执行 ...

  8. iOS之多线程开发NSThread、NSOperation、GCD

    原文出处: 容芳志的博客   欢迎分享原创到伯乐头条 简介iOS有三种多线程编程的技术,分别是:(一)NSThread(二)Cocoa NSOperation(三)GCD(全称:Grand Centr ...

  9. Ios开发之多线程编程——NSThread

    IOS程序在运行的时候是通过主线程来进行UI视图的更新和响应屏幕触摸事件,但是,在视图更新的时候,会有一些非常耗时的工作,这样我们会出现系统出现卡顿的现象,这是因为主线程堵塞造成的,这样会使用户体验非 ...

  10. IOS开发 多线程编程 - NSThread

    每个iOS应用程序都有个专门用来更新显示UI界面.处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就是将 ...

随机推荐

  1. 细数国外SEO,SEM,SNS资深博客论坛和站点

    如果你有时间,如果有英语还不错能看懂国外的推广营销知识,如果你想做个实战者,如果你想比别人多领先,如果你爱好这个推广行业,如果你不想做河塘里的小鱼,如果····请一个个的看以下的站点,个人觉得会给你另 ...

  2. Solidworks如何制作动画1

    1点击窗口下方的"运动算例1"可以弹出动画的面板,右击该"运动算例1"还可以对这个动画窗口重命名等操作. 2 我们从最简单的动画开始,假设图示装配体,想要把它从 ...

  3. linux 安装jdk和tomcat

    安装jdk 下载相关jdk .rpm包,如:jdk-8u31-linux-i586.rpm 解压:#rpm -ivh jdk-8u31-linux-i586.rpm 配置环境变量:#vi  /etc/ ...

  4. React学习之事件绑定

    React事件绑定有主要有三种方式 第一种官方推荐方式: class LoginControl extends React.Component {   constructor(props) {     ...

  5. 一步一步实现一个简单的OS(简单的让boot载入setup)

    这次直接写用boot载入setup模块. 文件系统就先不弄了,以后再说, 咱先整个转简单的载入器. 我把软盘引导改成硬盘了,由于硬盘的读扇区函数简单一些. 这里没有做硬盘的mbr区,我认为在如今我的这 ...

  6. 解决ListView滑动时出现黑边的问题

    [声明]转载请注明出处,此文出自指尖飞落的博客:http://blog.csdn.net/huntersnail --尊重作者,知识无价.交流无限! 两种方法 1.代码去边缘线 myList.setF ...

  7. Docker入门系列1:简介

    可以实现快速部署. 比如一台 16 核 32G 内存的虚拟机上,需要跑 500+ 个用户的应用(每个应用的功能可以认为是一个网站 + 一系列的 RESTful API),有两个事情很重要: 资源隔离: ...

  8. Svn服务器备份迁移小结

    注:svn备份千万不要采用打包压缩,然后解压文件的方式. 备份和还原之前先要关掉svn服务器. svn备份一般采用三种方式: 1)svnadmin dump 2)svnadmin hotcopy 3) ...

  9. JQuery中的text(),html()和val()区别

    定义和用法 text() 方法方法设置或返回被选元素的文本内容 代码如下 <!DOCTYPE html> <html lang="en"> <head ...

  10. android -volley-请求数据

    private List<gson.DataBean>arrGson;//请求的数据 //请求数据的方法 public void initData() { RequestQueue mQu ...