版权声明:原创作品,谢绝转载!否则将追究法律责任。
 
我们开发的应用基本上都是多线程的,几乎没有不是多线程的应用发布在appstore。首先我们的应用启动会默认有一个主线程,你一直在里面执行很多操作如果操作执行的时间很长,用户会马上关掉你的应用这不是你想看到的。我们可以采用多线程的技术创建一个辅助线程来把一些执行很长时间的操作放到这个辅助线程里。
 
下面我们看看几个术语
 
l 线程(线程)用于指代独立执行的代码段。
 
l 进程(process)用于指代一个正在运行的可执行程序,它可以包含多个线程。
 
l 任务(task)用于指代抽象的概念,表示需要执行工作。
 
我们可以这样理解:我们可以在电脑上开启多个QQ应用。每个QQ应用可以同时打开很多聊天的窗口。这里每个QQ是一个进程,然后每个QQ聊天窗口是一个QQ应用的一个线程。
 
现在我们可以大概了解多线程的概念了。但是我们真的要用多线程技术吗?或者说我们真的要编写多线程技术代码吗?为什么要这样问呢?
 
下面是我这样问的几点原因:
1:首先多线程技术是耗费资源的比如系统的内存和cpu的占用
2:多线程可能造成两个线程同时访问一块内存来造成资源争夺
3:刚才也说了多线程耗费宝贵的资源,你应该保证你多线程里面执行的操作运行时间长而且有效率。我们还得中断那些空闲的线程。这样有能降低我们应用的内存占用,来腾出内存给其他的应用。
4:线程之间的通信,有时候辅助线程可能要通知主线程做的工作怎么样了。这时候就用到了线程通信的技术。
5:线程的退出,一个线程执行完他的任务自然退出是最好的选择。但是有时候你强制退出一个线程会造成一些内存泄漏等潜在的安全问题。
6:如果你的一个线程突然因为什么原因抛出一个异常。你需要捕获异常,因为同一个进程的线程不能捕获其他线程的异常信息。我们必须把异常情况一个NSException对象从一个线程传递到另一个线程,向这个线程报告发生了什么,这样引发异常的线程可以继续执行(如果有可能),或者干脆退出。
7:线程浪费宝贵的资源我们需要提高他的效率需要专门一个run loop来处理要执行的事件,有时候还需要一个自动释放池来管理创建的一些临时对象。
 
这就是我们手动编写一个线程可能遇到的一些问题。因此自己写多线程代码是需要非常小心的。我们可以用其他的多线程代替的技术来做这样的工作,但是如果确实需要我们接下来也会介绍。
先说几个多线程的代替技术:
 
Grand Central DispatchGCD):
 
系统管理线程,你不需要编写线程代码。只需定义想要执行的任务,然后添加到适当的 dispatch queue。 GCD会负责创建线程和调度你的任务。系统直接提供线程管理,比应用实现更加高效。
 
Operation Queue
 
Objective-C对象,类似于 dispatch queue。你定义想要执行的任务,并添加任务到 operation queue,后者负责调度和执行这些任务。和 GCD一样, Operation Queue也管理了线程,更加高效
 
asynchronous functions:
系统的一些API接口给你提供了异步的功能自动支持并发功能。这些API也许用系统的机制和进程来创建自定义的线程来执行他们的任务并且返回结果给他们。一旦你设计应用,寻找提供异步功能的API接口来代替用同步放在自定义线程。
timers:
你可以用timers在你的应用主线程来执行周期性的任务这时需要一个线程是太微不足道了。但是仍然要提供每隔一段时间的服务。
 
还有一些其他的技术这里就不多做介绍。
下面一篇将介绍怎么创建线程并对创建的线程进行管理的操作。
 

IOS多线程之序的更多相关文章

  1. iOS多线程杂论

    iOS多线程的分布 (1) NSThread (2) NSOperation (3) GCD 现在对下面三个进行一个个的分析,希望那里说得不对的地方希望简友们帮我指点一二. 1,NSThread 优点 ...

  2. iOS 多线程:『GCD』详尽总结

    本文用来介绍 iOS 多线程中 GCD 的相关知识以及使用方法.这大概是史上最详细.清晰的关于 GCD 的详细讲解+总结的文章了.通过本文,您将了解到: 1. GCD 简介 2. GCD 任务和队列 ...

  3. iOS多线程主题

    下面是:2个并发进程.和2个并发线程的示意图: 下面介绍三种多线程技术(Thread.Cocoa Operation.Grand Central Dispatch): 1.最轻量级Thread(需要自 ...

  4. iOS多线程技术方案

    iOS多线程技术方案 目录 一.多线程简介 1.多线程的由来 2.耗时操作的模拟试验 3.进程和线程 4.多线程的概念及原理 5.多线程的优缺点和一个Tip 6.主线程 7.技术方案 二.Pthrea ...

  5. iOS 多线程GCD的基本使用

    <iOS多线程简介>中提到:GCD中有2个核心概念:1.任务(执行什么操作)2.队列(用来存放任务) 那么多线程GCD的基本使用有哪些呢? 可以分以下多种情况: 1.异步函数 + 并发队列 ...

  6. iOS多线程到底不安全在哪里?

    iOS多线程安全的概念在很多地方都会遇到,为什么不安全,不安全又该怎么去定义,其实是个值得深究的话题. 共享状态,多线程共同访问某个对象的property,在iOS编程里是很普遍的使用场景,我们就从P ...

  7. iOS多线程的详情使用示例--简进祥

    大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能 ...

  8. iOS多线程

    关于iOS多线程 概述 这篇文章中,我不会说多线程是什么.线程和进程的区别.多线程有什么用,当然我也不会说什么是串行.什么是并行等问题,这些我们应该都知道的. 在 iOS 中其实目前有 4 套多线程方 ...

  9. iOS多线程学习及总结

    能有份网上的存储资料,备以后提升及参考 iOS 多线程编程 简介 一.      iOS有三种多线程编程的技术,分别是: 1.        NSThread 2.        Cocoa NSOp ...

随机推荐

  1. 数据抓取的艺术(三):抓取Google数据之心得

    本来是想把这部分内容放到前一篇<数据抓取的艺术(二):数据抓取程序优化>之中.但是随着任务的完成,我越来越感觉到其中深深的趣味,现总结如下: (1)时间     时间是一个与抓取规模相形而 ...

  2. tpshop全局公共方法

    TPshop 全局公告函数库 前后台可用  这里只列出有哪些方法, 简单描述, 具体的函数体查看 Application\Common\Common\function.php 文件 <?php ...

  3. Docker for Mac 安装及Mysql安装使用

    启动 mysql 镜像 docker run -d -p 127.0.0.1:3306:3306 –name mysql -v /Users/flyrPc/docker/mysql/data:/var ...

  4. 树莓派挂载ntfs优盘

    步骤一:解压安装NTFS-3G,使用如下命令.    sudo apt-get install ntfs-3g 步骤二:配置挂载NTFS格式的移动硬盘 1. 首先得到NTFS分区的信息  sudo f ...

  5. 为tomcat指定JDK版本

    可以为tomcat指定JDK. 当系统中安装有多个版本的jdk时,可以为tomcat指定jdk版本. 在catalina.sh文件和setclasspath.sh文件开头的空白处加上如下一行: exp ...

  6. QT编译错误:cannot find file: *.pro

    编译一个之前同事写的QT程序,结果出现了编译错误:cannot find file: *.pro 解决方法:将程序放在英文路径下 尽管出现一些红色的编译信息部门,但是最终还算是编译成功了~

  7. linux如何通过脚本来修改用户的密码?脚本自动化修改用户密码?

    需求描述: linux环境中在创建用户的时候,涉及到修改用户的密码,一般是通过passwd命令进行修改,需要多次的确认,这里考虑通过一条命令直接对密码进行修改 不需要进行交互的方式.在此记录. 操作过 ...

  8. windows 环境下 ping 加时间戳 记日志

    在c盘下面新建文件 ping.vbs 在 ping.vbs中输入代码如下: Dim args, flag, unsuccOut args="" otherout="&qu ...

  9. linux添加PYTHONPATH环境变量

    1.添加环境变量到pythonpath export PYTHONPATH=$PYTHONPATH:/home/myproject 查看pythonpathecho $PYTHONPATH 可以进入p ...

  10. [OpenCV] Samples 01: Geometry - 几何图形

    前言 基本的几何图形,标注功能. commondLineParser的使用参见:http://blog.csdn.net/u010305560/article/details/8941365 #inc ...