多线程技术是有多套解决方案的,那么我们该如何选择呢? 技术方案 简介 语言 线程生命周期 使用频率 pthread 1.一套通用的多线程API 2.适用于UNIX,linux,windows等 3.跨平台,可移植 4.使用难度较高 C 程序员管理 几乎不用 NSThread 1.更加面向对象 2.简单易用,可直接操作线程对象 OC 程序员管理 偶尔使用 GCD 1.用来替代NSThread等线程技术 2.充分利用设备的多核 C 自动管理 经常使用 NSOperation 1.基于GCD(底层是G…
最近太忙没太多的时间,忙碌的码农生活空下来一点时间,都会挤出来看一些技术或者咨询的文章,废话不多说,直奔主题. 接着上一次的继续说. 定时器在多线程的使用 NSRunLoop 是线程相关的基础框架的一部分.一个run loop 就是一个事件处理的循环,用来不停的调度工作以及处理输入事件. 线程的生命周期存在五个状态:新建.就绪.运行.阻塞.死亡. NSRunLoop 可以保持一个线程一直为活动状态,不会马上销毁掉. 一般在(延时调用一个方法.定时器) run loop 属于一个调度 例如延时5s…
1.什么是NSOperation,NSOperationQueue? NSOperation是一个抽象的基类,表示一个独立的计算单元,可以为子类提供有用且线程安全的建立状态,优先级,依赖和取消等操作.系统已经给我们封装了NSBlckOperation和NSInvocationOperation两个实体类.使用起来也非常简单,不过我们更多的使用是自己继承并定制自己的操作. 2.我们为什么使用NSOperation? 在IOS的开发中,为了照顾用户体验,我们通常将那些耗时的操作的放到主线程以为的线程…
GCD是基于C的API,它是libdispatch的的市场名称.而libdispatch作为Apple公司的一个库,为并发代码在多核硬件(跑IOS或者OS X)上执行提供有力支持. 那么我们为什么要用GCD技术呢? 1.GCD能够推迟昂贵的计算任务,并在后台运行它们来改善你的应用的性能. 2.GCD提供一个易于使用的并发模型而不仅仅是锁和线程.以帮助我们避开并发陷阱. 3.GCD具有在常见模式(比如单例)上用更高性能的原语优化你的代码的潜在能力. 4.GCD旨在替换NSTread等线程技术. 5…
1.概念: 多线程(multithreading)到底是什么呢,它是指在软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件的支持,而能够在同一时间执行多个线程,进而提升整体处理性能.在一个程序中,这些独立运行的程序片段,叫做线程(thread).利用它编程的概念就叫做多线程处理. 2.多线程的原理: 对于单核的cpu而言,同一时间,CPU实际只能处理一个线程,也就是说,在某一时刻,实际只有一个线程在执行.所以对于在单核的CPU,执行多线程.实际上是在不同的线程之间来回切换.…
接着看NSOperation.NSOperationQueue线程间的通信: 应用场景:比如我们经常把一些耗时的操作比如下载图片放在子线程,那么当这个完成之后,我们就需要回到主线程,这个时候就需要用到线程间的通信. 来看下代码: //线程间通信 -(void)communication{ //1.创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; //2.添加操作 [queue addOperationWithBlock…
前一篇博客最后介绍了KVC 再json 转模型时遇到一些问题.今天接着来介绍KVC 的其他用法.其实我们在一开始的时候就一直再强调命名的重要性.命名规范是KVC 存活的基础.如果没有这个条件支撑,那么KVC使用起来就不会那么简单了.在这里大王再哔哔几句,作为一个程序员,不管我们长得有多丑,我们的代码一定好看.一段规范的代码代表我们的脸面,也是程序员成熟的标志.既然说到了命名,那么就再来看看KVC 让人吃惊的一面. 1)KVC 方法的搜索顺序 当你看到这个标题的时候,可能会诧异,说的是啥啊?啥是搜…
二.移魂大法 使用runtime还可以交换两个函数.先贴上代码和执行结果. #import <Foundation/Foundation.h> @interface DZLPerson : NSObject @property(nonatomic,weak)NSString *name; @property(nonatomic,assign)NSInteger age; -(void)test_inPerson; @end #import "DZLPerson.h" @im…
一些公用类: @interface ClassCustomClass :NSObject{ NSString *varTest1; NSString *varTest2; NSString *varTest3; } @property (nonatomic,assign)NSString *varTest1; @property (nonatomic,assign)NSString *varTest2; @property (nonatomic,assign)NSString *varTest3…
整理一些多线程相关的知识. 并行 & 并发 1.并行:并行是相对于多核而言的,几个任务同时执行.2.并发:并发是相对于单核而言的,几个任务之间快速切换运行,看起来像是"同时"发生的一样 NSThread 优点:轻量级缺点:需要手动管理线程活动,如生命周期.线程同步.睡眠等.搭配runloop实现常驻线程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 NSThread *thread = [[NSThread alloc] initWithT…