版权声明:原创作品,谢绝转载!否则将追究法律责任。
 
设置线程堆栈的大小:
系统为每个你新创建的线程,都会为你的进程空间分配一定的内存作为该线程的堆栈。这里面有我们局部变量声明我们的方法就是一个堆栈。
 
如果你想改变一个给定线程的堆栈大小,你必须在创建该线程之前做一些操作。几乎所有线程技术都提供了相应的方法来设置堆栈的大小。
 
例如NSThread设置堆栈大小:
在IOS和MAC OS 10.5之后,创建初始化一个NSThread最好不要用雷类方法创建(detachNewThreadSelector:toTarget:withObject: ),因为我们要设置线程的堆栈大小,我们调用start方法之前用setStackSize:方法来设置。
 
设置线程并存储一些信息:
我们如果想让线程存储这个线特有的信息以便在方面的时候用到他并且可以在线程之间传递信息。比如我们之前说过的run loop处理事件。可以存储处理了多少次事件的次数。
NSThread的threadDictionary方法返回一个NSMutableDictionary对象。我们可以在里面存储线程的一些信息。
 
线程的脱离状态:
有时候我们中断一个线程时候希望回收他的资源,脱离线程可以做到。与之相反的是可连接线程,他必须在推出之前必须被其他线程连接,并且可以拿到退出线程的数据。
大部分的上层线程技术默认是创建脱离线程。因为他们在线程完成时候立刻释放回收资源。
注意:当线程处于周期性工作而不被中断的时候比如保存数据到硬盘,可连接线程是最佳选择。
 
设置线程的优先级:
试想这样一个情况一个线程池里面有很多的线程。每个线程被创建的时候等级是一样的。我们假如想让某个线程先被执行可以设置这个线程的优先级高于其他线程,这样他会被先执行。
NSThread可以setThreadPriority方法设置当前运行线程的优先级
 
设置自动释放池:
之前我们说过在线程执行的一个方法里面可以设置run loop来处理事件并且可以用一个自动释放池来清理线程代码执行后的东西。
 
IOS在他们的每个线程必须创建至少一个自动释放池。主线程默认就创建了。有自动回收机制的应用创建自动释放池也不是必须的,只是他们被忽略掉。
 
因此我们在编写线程主体入口的时候要先创建一个自动释放池。在线程结束的时候自动释放他。例如一个循环我们应该每次循环一次创建并释放该自动释放池。我们可以用这样的方法来防止我们应用程序内存占用太造成的性能问题。
 
设置异常处理:
之前提到过如果一个线程的异常未捕获,可能造成你的应用强制退出因为其他的线程也不能捕获,因此我们最好在线程的主体入口写一个捕获线程异常的函数try/catch,用来捕获任何位置的异常。
 
设置run loop
当一个编写一个线程时候,我们可以让他执行一个长期的操作很少中断,线程完成时候退出。也可以让我们的线程放入一个循环里面,让他动态处理操作。后面这种做法就类似在线程里面加入一个run loop。你的主线程默认启动一个run loop。但是你创建自己的线程需要自己添加启动。后面我们会详细介绍。
中断线程:
我们退出一个线程推荐方法是让他在主体入口正常的退出。虽然系统API提供了直接杀死线程的方法,但是这样做会阻止线程清理内存等工作。会造成潜在的问题之前也说了。
因此我们可以设置我们线程响应取消或者退出消息。对于长时间的操作,这意味着要周期性来检查这个消息是不是到来,这样线程有机会来清理完成最终退出。我们可以用run loop的输入源来检测这个消息的到来。具体后面会详细介绍。
 

IOS多线程之线程属性的配置的更多相关文章

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

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

  2. LInux多线程编程----线程属性pthread_attr_t

    1.每个POSIX线程有一个相连的属性对象来表示属性.线程属性对象的类型是pthread_attr_t,pthread_attr_t 在文件/usr/include/bits/pthreadtypes ...

  3. IOS多线程之线程的创建

    版权声明:原创作品,谢绝转载!否则将追究法律责任.   之前也说过线程是消耗资源的.多线程会占用你应用程序(和系统的)的内存使用和性能方面的资源.我们创建一个线程后可以对他的一些部分进行配置例如可以对 ...

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

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

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

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

  6. iOS多线程编程指南(二)线程管理

    当应用程序生成一个新的线程的时候,该线程变成应用程序进程空间内的一个实体.每个线程都拥有它自己的执行堆栈,由内核调度独立的运行时间片.一个线程可以和其他线程或其他进程通信,执行I/O操作,甚至执行任何 ...

  7. ios 多线程开发(二)线程管理

    线程管理 iOS和OS X中每一个进程(或程序)由一个或多个线程组成.程序由一个运行main方法的线程开始,中间可以产生其他线程来执行一些指定的功能. 当程序产生一个新线程后,这个线程在程序进程空间内 ...

  8. iOS开发多线程篇—线程安全

    iOS开发多线程篇—线程安全 一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块 ...

  9. iOS多线程开发资源抢夺和线程间的通讯问题

    说到多线程就不得不提多线程中的锁机制,多线程操作过程中往往多个线程是并发执行的,同一个资源可能被多个线程同时访问,造成资源抢夺,这个过程中如果没有锁机制往往会造成重大问题.举例来说,每年春节都是一票难 ...

随机推荐

  1. Maven POM

    POM代表项目对象模型.它是 Maven 中工作的基本单位,这是一个 XML 文件.它始终保存在该项目基本目录中的 pom.xml 文件.POM 包含的项目是使用 Maven 来构建的,它用来包含各种 ...

  2. e821. 设置JScrollPane滚动栏

    A scroll bar in a scroll pane can be set to appear only as needed, always appear, or never appear. B ...

  3. 深入理解Java对象序列化

    关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结.此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制.在撰写本文时,既参考了Th ...

  4. C#提高------------------------Attribute自定制概念

    C#基础知识梳理系列八:定制特性Attribute   摘 要 设计类型的时候可以使用各种成员来描述该类型的信息,但有时候我们可能不太愿意将一些附加信息放到类的内部,因为这样,可能会给类型本身的信息描 ...

  5. Git -- 分支管理简介

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...

  6. java EE 环境配置(JDK + Tomcat + Eclipse for java EE)

    这学期的课程多数都是java语言的,像Java Web程序设计,java课程设计案例,所以趁周末先把软件,环境配置好. 下载JDK 先给上下载链接:http://www.oracle.com/tech ...

  7. python shlex 模块

    shkex 模块最常见的用法就是其中的split 函数,split 函数提供了和shell 处理命令行参数时一致的分隔方式 代码示例: shlex.split("python -u a.py ...

  8. ubuntu 16.04使用软件中心升级软件后桌面显示空白

    转载:http://www.jb51.net/os/Ubuntu/472560.html 每次在ubuntu Software里进行Updates后(或者直接关机后),重启电脑后,桌面显示空白 解决办 ...

  9. jquery带token访问接口ajax

    1.在公共js里全局设置 //设置全局ajax $.ajaxSetup({ xhrFields: { withCredentials: true } }); 2.登录成功时,设置cookie (注: ...

  10. Java多线程——可阻塞的队列BlockingQueue

    阻塞队列与Semaphore有些相似,但也不同,阻塞队列是一方存放数据,另一方释放数据,Semaphore通常则是由同一方设置和释放信号量. ArrayBlockingQueue 只有put方法和ta ...