版权声明:原创作品,谢绝转载!否则将追究法律责任。
 
之前也说过线程是消耗资源的。多线程会占用你应用程序(和系统的)的内存使用和性能方面的资源。我们创建一个线程后可以对他的一些部分进行配置例如可以对辅助线程分配堆空间的大小。对于创建线程的时间依赖于处理器的负载及其计算速度和可用的系统和程序的空间。
 
下面介绍创建一个线程所占用的资源:
核心的数据结构:大约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. linux中查看某个端口(port)

    查看 27017 端口: netstat -anp | grep 27017 Proto              Recv-Q   Send-Q   Local Address           ...

  2. PHP + Smarty + html5 构建Wap应用

    一 简介     Smarty是一个PHP编写的模板引擎(template engine),主要用于构建web应用程序的表示层.Smarty的主页是http://www.smarty.net/down ...

  3. Spring系列(一):Spring的基本概念及其核心

    一.Spring是什么 Spring是一种多层的J2EE应用程序框架,其核心就是提供一种新的机制管理业务对象及其依赖关系. 二.为什么要使用Spring 1. 降低组件之间的耦合度,实现软件各层之间的 ...

  4. Windows错误码大全

    0000 操作已成功完成.0001 错误的函数.0002 系统找不到指定的文件.0003 系统找不到指定的路径.0004 系统无法打开文件.0005 拒绝访问.0006 句柄无效.0007 存储区控制 ...

  5. c、c++---linux上的GetTickCount函数

    http://blog.csdn.net/guang11cheng/article/details/6865992 http://wenda.so.com/q/1378766306062794

  6. 多媒体开发之ftp---一个很现实的需求把ftp转换成rtmp协议做点播

    http://www.dy2018.com/i/96131.html# http://www.hdpfans.com/thread-15684-1-1.html ftp://xc:xc@dz.dl12 ...

  7. 微软office web apps 服务器搭建之在线文档预览

    案例:http://owa.linbsoft.com/op/generate.aspx# 文档地址:http://demo.linbsoft.com/CourseFile/201407/2014070 ...

  8. ASP.NET 网站超时跳转到登录界面

    利用actionFilter过滤器实现,超时跳转到登录界面 /// <summary> /// 登录超时跳转至登录界面 /// </summary> public class ...

  9. 有空研究一下 superwebsocket (底层是 supersocket) 用来实现 web聊天什么的

    参考:http://superwebsocket.codeplex.com/ 一个老外写的 asp.net 下socket的多钟方案推荐 :http://www.codeproject.com/Art ...

  10. Eclipse和MyEclipse的区别 分类: 编程工具 2015-07-18 11:12 23人阅读 评论(0) 收藏

    今天,在一个Q群里有人问Eclipse和MyEclipse的区别.虽然对于知道的人来说答案很简单,但是对于不知道的人来说就很难,很多问题也都是这样的,会者不难,难者不会. 其实,网上搜搜答案就挺多的, ...