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

简介: 版权声明:原创作品,谢绝转载!否则将追究法律责任。   设置线程堆栈的大小: 系统为每个你新创建的线程,都会为你的进程空间分配一定的内存作为该线程的堆栈。这里面有我们局部变量声明我们的方法就是一个堆栈。
版权声明:原创作品,谢绝转载!否则将追究法律责任。
 
设置线程堆栈的大小:
系统为每个你新创建的线程,都会为你的进程空间分配一定的内存作为该线程的堆栈。这里面有我们局部变量声明我们的方法就是一个堆栈。
 
如果你想改变一个给定线程的堆栈大小,你必须在创建该线程之前做一些操作。几乎所有线程技术都提供了相应的方法来设置堆栈的大小。
 
例如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的输入源来检测这个消息的到来。具体后面会详细介绍。
 

 

相关文章
|
8天前
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android多线程编程的重要性及其实现方法,涵盖了基本概念、常见线程类型(如主线程、工作线程)以及多种多线程实现方式(如`Thread`、`HandlerThread`、`Executors`、Kotlin协程等)。通过合理的多线程管理,可大幅提升应用性能和用户体验。
25 15
一个Android App最少有几个线程?实现多线程的方式有哪些?
|
10天前
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android应用开发中的多线程编程,涵盖基本概念、常见实现方式及最佳实践。主要内容包括主线程与工作线程的作用、多线程的多种实现方法(如 `Thread`、`HandlerThread`、`Executors` 和 Kotlin 协程),以及如何避免内存泄漏和合理使用线程池。通过有效的多线程管理,可以显著提升应用性能和用户体验。
30 10
|
9天前
|
iOS开发 UED 开发者
iOS 手势中cancelsTouchesInView delaysTouchesBegan delaysTouchesEnded 三种属性的使用
iOS 手势中cancelsTouchesInView delaysTouchesBegan delaysTouchesEnded 三种属性的使用
|
17天前
|
存储 Ubuntu Linux
C语言 多线程编程(1) 初识线程和条件变量
本文档详细介绍了多线程的概念、相关命令及线程的操作方法。首先解释了线程的定义及其与进程的关系,接着对比了线程与进程的区别。随后介绍了如何在 Linux 系统中使用 `pidstat`、`top` 和 `ps` 命令查看线程信息。文档还探讨了多进程和多线程模式各自的优缺点及适用场景,并详细讲解了如何使用 POSIX 线程库创建、退出、等待和取消线程。此外,还介绍了线程分离的概念和方法,并提供了多个示例代码帮助理解。最后,深入探讨了线程间的通讯机制、互斥锁和条件变量的使用,通过具体示例展示了如何实现生产者与消费者的同步模型。
|
调度 iOS开发
iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍   一、进程和线程 1.什么是进程   进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内     比如同时打开QQ、Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程   2.
573 0
|
1天前
|
开发框架 数据可视化 Java
iOS开发-SwiftUI简介
iOS开发-SwiftUI简介
|
10天前
|
IDE 开发工具 Android开发
安卓与iOS开发对比:平台选择对项目成功的影响
【9月更文挑战第10天】在移动应用开发的世界中,选择正确的平台是至关重要的。本文将深入探讨安卓和iOS这两大主要移动操作系统的开发环境,通过比较它们的市场份额、开发工具、编程语言和用户群体等方面,为开发者提供一个清晰的指南。我们将分析这两个平台的优势和劣势,并讨论如何根据项目需求和目标受众来做出最佳选择。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解每个平台的特性,并指导你做出明智的决策。
|
8天前
|
API Android开发 iOS开发
安卓与iOS开发中的线程管理对比
【9月更文挑战第12天】在移动应用的世界中,安卓和iOS平台各自拥有庞大的用户群体。开发者们在这两个平台上构建应用时,线程管理是他们必须面对的关键挑战之一。本文将深入探讨两大平台在线程管理方面的异同,通过直观的代码示例,揭示它们各自的设计理念和实现方式,帮助读者更好地理解如何在安卓与iOS开发中高效地处理多线程任务。