版权声明:原创作品,谢绝转载!否则将追究法律责任。
 
之前也说过线程是消耗资源的。多线程会占用你应用程序(和系统的)的内存使用和性能方面的资源。我们创建一个线程后可以对他的一些部分进行配置例如可以对辅助线程分配堆空间的大小。对于创建线程的时间依赖于处理器的负载及其计算速度和可用的系统和程序的空间。
 
下面介绍创建一个线程所占用的资源:
核心的数据结构:大约1KB 这个内存是用来存储线程的数据结构和属性。
堆栈空间:辅助线程是512KB MacOSX主线程是8MB IOS主线程是1MB  最低允许辅助线程堆栈大小是16 KB并且堆栈大小必须是4 KB的倍数
线程创建的时间:大约90微妙
 
注意:因为底层内核的支持,操作对象(Operation objectis)可能创建线程更快。它们使用内核里面常驻线程池里面的线程来节省创建的时间,而不是每次都创建新的线程。关于更多使用操作对象(Operation objects)的信息,参阅并发编程指南(Concurrency Programming Guide)。
 
怎么创建一个线程呢?
创建低级别的线程相对简单。在所有情况下,你必须有一个函数或方法作为线程的主入口点。线程创建使用了这些技术的继承属性的默认设置,由你所使用的技术来决定。更多需要自己配置线程的属性。
 
使用NSThread
使用NSThread来创建线程有两个可以的方法:
 
l 使用detachNewThreadSelector:toTarget:withObject:类方法来生成一个新的线程。
[NSThread detachNewThreadSelector:@selector(myThreadMainMethod:) toTarget:self withObject:nil];
为了生成一个新的线程,你只要简单的提供你想要使用为线程主体入口的方法的名称(被指定为一个selector),和任何你想在启动时传递给线程的数据。
l 创建一个新的NSThread对象,并调用它的start方法。
 
NSThread* myThread = [[NSThread alloc] initWithTarget:self
 
selector:@selector(myThreadMainMethod:)
 
object:nil];
 
[myThread start]; // Actually create the thread
  为了启动一个线程,你可以显式调用对象的start方法
 
注意:使用initWithTarget:selector:object:方法的替代办法是子类化NSThread,并重写它的main方法。你可以使用你重写的该方法的版本来实现你线程的主体入口。
 
我们可以给刚才创建的线程发送息并在多线程上执行selectors 
performSelector:onThread:withObject:waitUntilDone:
 
你使用该技术时所发送的消息会被其他线程作为run-loop主体的一部分直接执行(当然这些意味着目标线程必须在它的run loop里面运行)。当你使用该方法来实现线程通信的时候,你可能仍然需要一个同步操作,但是这比在线程间设置通信端口简单多了。
 
注意:虽然在线程间的偶尔通信的时候使用该方法很好,但是你不能周期的或频繁的使用performSelector:onThread:withObject:waitUntilDone:来实现线程间的通信。
 
使用NSObject来生成一个线程
在iOS和Mac OS X v10.5及其之后,所有的对象都可能生成一个新的线程,并用它来执行它任意的方法。方法performSelectorInBackground:withObject:新生成一个的线程,使用指定的方法作为新线程的主体入口点。比如,如果你有一些对象(使用变量myObj来代表),并且这些对象拥有一个你想在后台运行的doSomething的方法,你可以使用如下的代码来生成一个新的线程:
[myObj performSelectorInBackground:@selector(doSomething) withObject:nil];
调用该方法的效果和你在当前对象里面使用NSThread的detachNewThreadSelector:toTarget:withObject:传递selectore,object作为参数的方法一样。新的线程将会被立即生成并运行,它使用默认的设置。在selectore内部,你必须配置线程就像你在任何线程里面一样。比如,你可能需要设置一个自动释放池(如果你没有使用垃圾回收机制),在你要使用它的时候配置线程的run loop。
以上我们是创建线程后需要对他的属性做一些配置下篇我们会具体的介绍。

IOS多线程之线程的创建的更多相关文章

  1. IOS 多线程,线程同步的三种方式

    本文主要是讲述 IOS 多线程,线程同步的三种方式,更多IOS技术知识,请登陆疯狂软件教育官网. 一般情况下我们使用线程,在多个线程共同访问同一块资源.为保护线程资源的安全和线程访问的正确性. 在IO ...

  2. Java多线程之线程的创建

    好久没有更博客了,最近一直在忙工作的事情.现在终于空下来了,这2天会抓紧时间整理多线程和socket,把JavaSE结束掉. 关于多线程,首先会涉及到哪些东西呢?首先要了解线程,为什么要使用线程,线程 ...

  3. Linux多线程编程——线程的创建与退出

    POSIX线程标准:该标准定义了创建和操纵线程的一整套API.在类Unix操作系统(Unix.Linux.Mac OS X等)中,都使用Pthreads作为操作系统的线程.Windows操作系统也有其 ...

  4. IOS多线程之线程属性的配置

    版权声明:原创作品,谢绝转载!否则将追究法律责任.   设置线程堆栈的大小: 系统为每个你新创建的线程,都会为你的进程空间分配一定的内存作为该线程的堆栈.这里面有我们局部变量声明我们的方法就是一个堆栈 ...

  5. (C#- 多线程) 在线程中创建object,共享问题。

    研究如下问题: 1. 在一个进程的主线程中创建一个Object,其他线程都可以访问这个Object,并操作Object的方法. - 多线程同步问题. 2. 在一个进程的多个线程里面,每个线程都创建同一 ...

  6. 【原】iOS多线程之线程间通信和线程互斥

    线程间通信 1> 线程间通信分为两种 主线程进入子线程(前面的方法都可以) 子线程回到主线程 2> 返回主线程 3> 代码 这个案例的思路是:当我触摸屏幕时,会在子线程加载图片,然后 ...

  7. iOS 多线程之线程锁Swift-Demo示例总结

    线程锁是什么 在前面的文章中总结过多线程,总结了多线程之后,线程锁也是必须要好好总结的东西,这篇文章构思的时候可能写的东西得许多,只能挤时间一点点的慢慢的总结了,知道了线程之后要了解线程锁就得先了解一 ...

  8. ios多线程的几种创建方式以及基本使用

    1.第一种,NSThread方法,此方法使用很少! 2.NSOperation,面向对象的多线程技术 3. NSObject多线程技术 4.苹果推荐使用的GCD技术 5.GDC中的队列

  9. iOS多线程系列(1)

    多线程这个概念的接触是蛮早的时候了,当时还是单核单CPU的时候,Thread这个概念已经出现了,当时比较流行的方案是时间片轮流,线程可以优先级抢占,但一次只能运行一个线程,实际上多线程是不能真正并行处 ...

随机推荐

  1. Redis工业生产应用场景

    Redis应用场景 国内外三个不同领域巨头分享的Redis实战经验及使用场景 Redis的5个常见使用场景 Redis应用场景 Redis应用场景<张善友>

  2. Linux——ps(列出进程)

    ps是Linux系统中用于查看进程状况的命令,用于显示当前系统中进程的快照.ps会显示部分当前活动的进程信息,不同于top指令,top指令会实时的更新所显示的进程动态. Linux的ps指令兼容了多种 ...

  3. erlang的erl文件的编码方式

    在数据源头的文件第一行加上%%coding: latin-1

  4. thinkphp模板中使用方法

    1.php中的方法使用 <?php $var_num = "13966778888"; $str = substr_replace($var_num,'*****',3,5) ...

  5. 图像处理、计算机视觉与模式识别“SCI期刊和顶级会议”总结

    期刊: best (1) IEEE Transactions on Pattern Analysis and Machine Intelligence,IEEE模式分析与机器智能汇刊,简称PAMI,是 ...

  6. Linux学习笔记<五>——<Shell部分>

    管道命令(pipe) 1.把一个命令的输出作为另一个命令的输入 ls -al /etc | less 2.选取命令:cut和grep cut命令可以将一段消息的某段切出来. -d接分隔符,-f是取出第 ...

  7. 移植3.4.2的Kernel到JZ2440

        本文将介绍如何移植linux-3.4.2内核到JZ2440开发板上的全过程,使用的交叉编译工具版本为 arm-linux-gcc-4.3.2.tar.bz2     下面来一步一步介绍如何移植 ...

  8. HTML5 touche vents drag to move & AF actionsheet by longTap

    $('img').on("touchstart",function(E){ //E.preventDefault();E.stopPropagation(); var el=thi ...

  9. 为Hadoop集群选择合适的硬件配置

    随着Apache Hadoop的起步,云客户的增多面临的首要问题就是如何为他们新的的Hadoop集群选择合适的硬件. 尽管Hadoop被设计为运行在行业标准的硬件上,提出一个理想的集群配置不想提供硬件 ...

  10. apt 之 最强技能:【欺骗】,文雅点【偷梁换柱】!

    apt这种软件包管理系统,有个最大特点是:只照本宣科,而不管实际情况. 所以,我们用户就可以利用这一点,来欺骗它,达到我们的目的. ------------------------------好了,现 ...