首先,我们要明确NSOperationQueue与GCD之间的关系: NSOpertaionQueue用GCD构建封装的,是GCD的高级抽象. 其次,我们要区别两者的不同: GCD仅仅支持FIFO队列,而NSOperationQueue中的队列可以被重新设置优先级,从而实现不同操作的执行顺序调整. GCD不支持异步操作之间的依赖关系设置.如果某个操作的依赖另一个操作的数据(生产者-消费者模型是其中之一),使用NSOperationQueue能够按照正确的顺序执行操作.GCD则没有内建的依赖关系支…
使用NSOperationQueue用来管理子类化的NSOperation对象,控制其线程并发数目.GCD和NSOperation都可以实现对线程的管理,区别是 NSOperation和NSOperationQueue是多线程的面向对象抽象.项目中使用NSOperation的优点是NSOperation是对线程的高度抽象,在项目中使用它,会使项目的程序结构更好,子类化NSOperation的设计思路,是具有面向对象的优点(复用.封装),使得实现是多线程支持,而接口简单,建议在复杂项目中使用. 项…
定义:不要存在多于一个导致类变更的原因. 通俗的说.即一个类仅仅负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而须要改动类T时,有可能会导致原本执行正常的职责P2功能发生问题.   解决方式:遵循单一职责原则.分别建立两个类T1.T2,使T1完毕职责P1功能.T2完毕职责P2功能. 这样,当改动类T1时,不会使职责P2发生问题风险:同理,当改动T2时,也不会使职责P1发生问题风险.   说到单一职责原则.非常多人都会不屑一顾. 由于它太简单了.稍…
1> GCD是纯C语言的API .NSOperationQueue是基于GCD的OC的封装. 2> GCD只支持FIFO队列,NSOperationQueue可以方便设置执行顺序,设置最大的并发数量. 3> NSOperationQueue可是方便的设置operation之间的依赖关系,GCD则需要很多代码. 4> NSOperationQueue支持KVO,可以检测operation是否正在执行(isExecuted),是否结束(isFinished),是否取消(isCancel…
多线程编程 线程定义:一个CPU执行的CPU命令 列一条无分叉的路径就叫线程. 多线程:执行多个不同的CPU命令 有多条路径. 线程的使用:主线程(又叫作UI线程)主要任务是处理UI事件,显示和刷新UI,(只有主线程有直接修改UI的能力)耗时的操作放在子线程(又叫作后台线程.异步线程). 多线程容易引发的编程问题: 数据竞争:多个线程更新相同的资源会导致数据不一致. 死锁:停止等待事件的线程会导致多个线程相互持续等待. 太多线程会消耗大量内存. Thread Safe(线程安全):一段线程安全的…
//NSObject //在子线程中执行代码 // 参数1: 执行的方法 (最多有一个参数,没有返回值) //参数2: 传递给方法的参数 [self performSelectorInBackground:@selector(cycling:) withObject:@"obj1"]; // 回到主线程更新页面 [self performSelectorOnMainThread:@selector(updateUI:) withObject:nil waitUntilDone:YES]…
原创Blog.转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK具体解释专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言:近期有点忙,所以这个月更新的博客数量有些下降,预计这个月和下个月博客更新的数量都在10篇左右. 回到正题,本文会比較下GCD和NSOperation两种多线程的实现方式.然后解说下怎样选择,以及简单的演示样例. 选择GCD or NSOperation…
```objc1 使用Crearte函数创建的并发队列和全局并发队列的主要区别: 1)全局并发队列在整个应用程序中本身是默认存在的并且对应有高优先级.默认优先级.低优先级和后台优先级一共四个并发队列,我们只是选择其中的一个直接拿来用.而Create函数是实打实的从头开始去创建一个队列. 2)在iOS6.0之前,在GCD中凡是使用了带Create和retain的函数在最后都需要做一次release操作.而主队列和全局并发队列不需要我们手动release.当然了,在iOS6.0之后GCD已经被纳入到…
在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下CDD的使用. GCD(Grand Central Dispatch) ,他是基于C语言开发的一套多线程开发机制,也是目前苹果官方推荐的多线程开发方法.GCD的抽象层次最高,用起来比较简单,但是因为它是基于C语言开发的,是面向过程的,所以在使用的时候不如面向对象的好理解.但是GCD这种机制相比较于前面两种多线程开发方式最显著的优点就是它对于多核运算更加…
额外任务:学习YouXianMing封装好的GCD源码   1.GCD串行队列与并发队列   串行队列一次只执行一个线程,按照添加到队列的顺序依次执行 并发队列一次可以执行多个线程,线程的执行没有先后顺序 UI界面所在的线程队列是串行队列   下面使用将基于C语言的GCD封装成面向对象的可复用的源码,资源文件下载地址:           https://github.com/YouXianMing/GCD-Program 备份百度云下载链接: http://pan.baidu.com/s/1o…
转载自:http://www.jianshu.com/p/665261814e24 谈到iOS多线程,一般都会谈到四种方式:pthread.NSThread.GCD和NSOperation.其中,苹果推荐也是我们最经常使用的无疑是GCD.对于身为开发者的我们来说,并发一直都很棘手,如果对GCD的理解不够透彻,那么iOS开发的历程绝对不会顺利.这里,我会从几个角度浅谈我对GCD的理解. 一.多线程背景 Although threads have been around for many years…
谈到iOS多线程,一般都会谈到四种方式:pthread.NSThread.GCD和NSOperation.其中,苹果推荐也是我们最经常使用的无疑是GCD.对于身为开发者的我们来说,并发一直都很棘手,如果对GCD的理解不够透彻,那么iOS开发的历程绝对不会顺利.这里,我会从几个角度浅谈我对GCD的理解. 一.多线程背景 Although threads have been around for many years and continue to have their uses, they do…
ios多线程实现种类 NSThread NSOperationQueue NSObject GCD *************** 1.NSThread //线程 第一种 NSThread *thread1=[[NSThread alloc] initWithTarget:self selector:@selector(sum) object:nil]; // //    //给线程起名字 thread1.name=@"thread1"; //    //启动线程 [thread1 s…
很长时间以来,我个人(可能还有很多同学),对多线程编程都存在一些误解.一个很明显的表现是,很多人有这样的看法: 新开一个线程,能提高速度,避免阻塞主线程 毕竟多线程嘛,几个线程一起跑任务,速度快,还不阻塞主线程,简直完美. 在某些场合,我们还见过另一个“高深”的名词——“异步”.这东西好像和多线程挺类似,经过一番百度(阅读了很多质量层次不齐的文章)之后,很多人也没能真正搞懂何为“异步”. 于是,带着对“多线程”和“异步”的懵懂,很多人又开开心心踏上了多线程编程之旅,比如文章待会儿会提到的GCD.…
面向对象的SOLID原则 简介 缩写 全称 中文 S The Single Responsibility Principle 单一责任原则 O The Open Closed Principle 开放封闭原则 L Liskov Substitution Principle 里氏替换原则 I The Interface Segregation Principle 接口分离原则 D The Dependency Inversion Principle 依赖倒置原则 单一职责原则 一个类只应承担一种责…
GCD的全称为Grand Central Dispatch,翻译为大中央调度,是Apple开发的一个多线程编程解决方法. 进程和线程的概念: 正在进行中的程序被称为进程,负责程序运行的内存分配,每一个进程都有自己独立的虚拟内存空间. 线程是进程中一个独立的执行路径,即主线程,主线程有1M的栈区,对于耗时的执行路径,可以放在子线程(512K栈区)中执行. Tip:新建线程会消耗内存空间和CPU事件,线程太多会降低系统的运行性能,多线程是通过CPU时分复用实现的. Tip:多线程是为了并发执行多项任…
S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写. 面向对象设计的原则 SRP  The Single Responsibility Principle 单一职责原则 OCP   The Open Closed Principle 开放封闭原则 LSP  The Liskov Substitution Principle 里氏替换原则 ISP   The Interface Segregation P…
使用NSOperation以及NSOperationQueue NSOperation vs. Grand Central Dispatch (GCD) 在Mac OS X v10.6和iOS4之前,NSOperation 与 NSOperationQueue 不同于GCD,他们使用了完全不同的机制. 从Mac OS X v10.6和iOS4开始,NSOperation 和 NSOperationQueue是建立在GCD上的.作为一种通例,苹果推荐使用最高级别的抽象,然而当评估显示有需要时,会突…
注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html      <How I explained OOD to my wife> 原文链接:http://www.codeproject.com/Articles/93369/How-I-explained-OOD-to-my-wife S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编…
进程 进程是指在系统中正在运行的一个应用程序 线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 1个线程中任务的执行是串行的(执行完上一个才能执行下一个) 多线程 1个进程中可以开启多条线程,多条线程可以并行(同时)执行不同的任务 线程可以并行, 但是每个线程中的任务还是串行 多线程原理 多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换) 多线程优缺点 优点 能适当提高程序的执行效率 能适当提高资源利用率(CPU.内存利用率) 缺点 线程越多,CPU在调度…
导语:在iOS中,多线程方案有四种:pthread.NSThread.NSOperation & NSOperationQueue 和 GCD,但是开发中GCD使用得最多,本文主要总结一下我使用GCD的情况. 一.GCD(Grand Central Dispatch)概述 1.基本概念 GCD允许程序将任务切分为多个单一任务,提交至Dispatch Queue,然后系统调度线程,实现并发或者串行地执行任务.GCD隐藏了内部线程的调度,开发者只需要关注创建或获取队列,然后将Block追加到队列中即…
参考文章 http://blog.csdn.net/sinat_26342009/article/details/46419873 继承vs组合:http://www.cnblogs.com/feichengwulai/articles/4137395.html 面向接口编程:https://www.cnblogs.com/lovelycode/articles/6887958.html     定义:   某类特定问题的代码设计解决方案 (设计模式,其实只是前人针对某类问题的代码设计经验而已,…
一.开闭原则 开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类.模块和函数应该对 扩展开放,对修改关闭. 所谓的开闭,也正是对扩展和修改两个行为的一个原则.强调 的是用抽象构建框架,用实现扩展细节. 可以提高软件系统的可复用性及可维护性.开 闭原则,是面向对象设计中最基础的设计原则.它指导我们如何建立稳定灵活的系统,实现开闭原则的核心思想就是面向抽象编程. 二.依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)是…
前言 ​ 今天开始我们专题的第二课了,本章节继续分享软件架构设计原则的下篇,将介绍:接口隔离原则.迪米特原则.里氏替换原则和合成复用原则.本章节参考资料书籍<Spring 5核心原理>中的第一篇 Spring 内功心法(没有电子档,都是我取其精华并结合自己的理解,一个字一个字手敲出来的). 接口隔离原则 ​ 接口隔离原则(Interface Segregation Principke,ISP)是指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口.这个原则知道我们在设计接口…
Java - 六原则一法则 单一职责原则:一个类只做它该做的事情.(单一职责原则想表达的就是"高内聚",写代码最终极的原则只有六个字"高内聚.低耦合",所谓的高内聚就是一个代码模块只完成一项功能,在面向对象中,如果只让一个类完成它该做的事,而不涉及与它无关的领域就是践行了高内聚的原则,这个类就只有单一职责.另一个是模块化,好的自行车是组装车,从减震叉.刹车到变速器,所有的部件都是可以拆卸和重新组装的,好的乒乓球拍也不是成品拍,一定是底板和胶皮可以拆分和自行组装的,一…
1.打造最受企业欢迎的iOS开发者: 一直都存在的问题,什么样的员工最受企业欢迎? 一直也有人在努力提升自己,成为受企业欢迎的员工 然而,我们应该往方向去提升自己呢? 88家知名企业今年来iOS面试题合集: 你要的这里都有: 企业要的这里也有: 从基础开始到进阶.深入底层 整理出188个大纲,干货太足 每个题目都会有相对的答案,由于字数太多所以我整理出一个文档,文档获取地址,加入iOS开发交流群:659170228免费获取.打造最受企业欢迎的iOS开发者 2.大纲展示阶段一: 01 1.swif…
在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads NSThread GCD NSOperation & NSOperationQueue 所以接下来,我会一一讲解这些方案的使用方法和一些案例.在将这些内容的时候,我也会顺带说一些多线程周边产品.比如: 线程同步. 延时执行. 单例模式 等等. Pthreads 其实这个方案不用说的,只是拿来充个数,为了让大家了解一下就好了.百度百科里是这么说的: POSIX线程(POSIX threads),简称Pthreads,是线程…
关于iOS多线程 概述 这篇文章中,我不会说多线程是什么.线程和进程的区别.多线程有什么用,当然我也不会说什么是串行.什么是并行等问题,这些我们应该都知道的. 在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads NSThread GCD NSOperation & NSOperationQueue 所以接下来,我会一一讲解这些方案的使用方法和一些案例.在将这些内容的时候,我也会顺带说一些多线程周边产品.比如: 线程同步. 延时执行. 单例模式 等等. Pthreads 其…
在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例,在实际使用中感受它们的区别.还有一点需要说明的是,这篇文章将会使用 Swift 和 Objective-c 两种语言讲解,双语幼儿园.OK,let't begin! 概述 这篇文章中,我不会说多线程是什么.线程和进程的区别.多线程有什么用,当然我也不会说什么是串行.什么是并行等问题,这些我们应该都知道的. 在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads…
关于iOS多线程的总结   在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例,在实际使用中感受它们的区别.还有一点需要说明的是,这篇文章将会使用 Swift 和 Objective-c 两种语言讲解,双语幼儿园.OK,let's begin! 概述 这篇文章中,我不会说多线程是什么.线程和进程的区别.多线程有什么用,当然我也不会说什么是串行.什么是并行等问题,这些我们应该都知道的. 在 iOS 中其实目前有 4 套多线程方案,他…