IOS多线程之序

简介: 版权声明:原创作品,谢绝转载!否则将追究法律责任。   我们开发的应用基本上都是多线程的,几乎没有不是多线程的应用发布在appstore。首先我们的应用启动会默认有一个主线程,你一直在里面执行很多操作如果操作执行的时间很长,用户会马上关掉你的应用这不是你想看到的。
版权声明:原创作品,谢绝转载!否则将追究法律责任。
 
我们开发的应用基本上都是多线程的,几乎没有不是多线程的应用发布在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在你的应用主线程来执行周期性的任务这时需要一个线程是太微不足道了。但是仍然要提供每隔一段时间的服务。
 
还有一些其他的技术这里就不多做介绍。
下面一篇将介绍怎么创建线程并对创建的线程进行管理的操作。
 
相关文章
|
22天前
|
API Android开发 iOS开发
安卓与iOS开发中的线程管理对比
【9月更文挑战第12天】在移动应用的世界中,安卓和iOS平台各自拥有庞大的用户群体。开发者们在这两个平台上构建应用时,线程管理是他们必须面对的关键挑战之一。本文将深入探讨两大平台在线程管理方面的异同,通过直观的代码示例,揭示它们各自的设计理念和实现方式,帮助读者更好地理解如何在安卓与iOS开发中高效地处理多线程任务。
|
2月前
|
安全 测试技术 调度
iOS开发-多线程编程
【8月更文挑战第12天】在iOS开发中,属性的内存管理至关重要,直接影响应用性能与稳定性。主要策略包括:`strong`(强引用),保持对象不被释放;`weak`(弱引用),不保持对象,有助于避免循环引用;`assign`(赋值),适用于基本数据类型及非指针对象类型;`copy`(复制),复制对象而非引用,确保不变性。内存管理基于引用计数,利用自动引用计数(ARC)自动管理对象生命周期。此外,需注意避免循环引用,特别是在block中。最佳实践包括理解各策略、避免不必要的强引用、及时释放不再使用的对象、注意block中的内存管理,并使用工具进行内存分析。正确管理内存能显著提升应用质量。
|
2月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享安卓与iOS开发中的线程管理比较
【8月更文挑战第30天】本文将探讨网络安全与信息安全的重要性,并分享关于网络安全漏洞、加密技术和安全意识的知识。我们将了解常见的网络攻击类型和防御策略,以及如何通过加密技术和提高安全意识来保护个人和组织的信息安全。
|
2月前
|
编译器 C语言 iOS开发
iOS 16 系统键盘修复问题之确定_lock是否用于保护对_deferredTasks的多线程读写如何解决
iOS 16 系统键盘修复问题之确定_lock是否用于保护对_deferredTasks的多线程读写如何解决
|
iOS开发
iOS多线程之NSOperationQueue-依赖、并发数、优先级、自定义Operation等最全的使用总结
iOS多线程之NSOperationQueue-依赖、并发数、优先级、自定义Operation等最全的使用总结
394 0
|
5月前
|
iOS开发
多线程和异步编程:解释 iOS 中的同步和异步任务的概念。
多线程和异步编程:解释 iOS 中的同步和异步任务的概念。
116 1
|
5月前
|
API 调度 iOS开发
多线程和异步编程:什么是 GCD(Grand Central Dispatch)?如何在 iOS 中使用 GCD?
多线程和异步编程:什么是 GCD(Grand Central Dispatch)?如何在 iOS 中使用 GCD?
60 1
|
安全 调度 C语言
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
827 1
|
安全 算法 编译器
iOS线程安全——锁(二)
iOS线程安全——锁(二)
140 0
|
存储 安全 API
iOS线程安全——锁(一)
iOS线程安全——锁(一)
240 0