一 OC 小结html
1 什么是 OC 语言?ios
OC 语言即面向对象语言,它扩展了 ANSI C 语言,将 SmallTalk 式的消息传递机制加入到 ANSI C 中.它是苹果 OS 和 iOS 以及相关的 API,Cocoa 和 Cocoa Touch 的主要编程语言.git
2 OC 语言的特色:程序员
3 iOS 的生态系统不只仅指其软件方面的丰富,更多指的是其设备的多样性.数据库
4 Core OS编程
是用 FreeBSD 和Mach所改写的Darwin,是开源的符合 POSIX 标准的一个 UNIX 核心.该层包含全部 iOS 的基础功能(全部的这些功能都是经过 C 语言的 API 来提供的).另外该层具备 UNIX 特色,所以当将 UNIX 上的功能移植到 iOS 上的时候用到Core OS 的 API.同时该层还提供了硬件和系统框架之间的接口,但出于安全考虑,只有有限的框架能使用.swift
5 Core Services设计模式
它在 Core OS 的基础上提供了更为丰富的功能,其中包括 Foundation.Framework 和 Core Foundation.Framework.之因此叫 Foundation 是由于,它提供了处理字串,排列,时间等基础功能.).其中 Foundation 属于 OC 是 API, 而 Core Foundation 属于 C 的 API.另外 Core Sercies 还提供了Security(处理认证,密码管理,安全性管理),Core Location(定位)SQLite(轻量级的数据库),Address Book(处理电话本)等功能.数组
6 Media缓存
即提供图像,音乐,影片等多媒体功能.其中图片包括2D(Quartz 2D) 和3D(Open GLES).音乐对应的模块是Core Audio 和Open AL. 影片用 Media Player来支持.最后还提供了Core Animation动画支持.
7 Cocoa Touch
它是 OC的 API其中最核心的部分的 UIKit.Framework,应用程序上的各类组件所有由它来提供实现.除此以外还负责多点触摸.文字的输出,图片网页的显示,相机/文件的存取以及加速感应的部分.
8 swift
它继承了 OC 的面向对象优势,同时又具备简便的语法结构.它具备如下特色.
9 OC 和 Swift 之间的区别
注:若是不想要break的效果 即后面的都想执行 那就写上关键字 fallThrough,但在fallThrough后面就不能再定义常量变量了
10 swift 独有的特色
Var a = (x:15,y:20.0)
其中 a 就是元祖名,里面有两个元素 x和 y.
取出赋值:a.x = 10或者 a.0 = 10(默认有下标)
修改类型: var a = (int,string) = (10,21.0)
打印时: printIn(a) = (10,20.0)
用下划线省略不须要的元素 var a = (_,20.0)
原来是形式: func Sum(num1:int,num2:int) àint{} 调用: Sum(10,20)
如今:func Sum(numOne num1:int,numTwo num2:int) àint{}
调用: Sum(numOne:10,numTwo:20)
func addPerson(name:string,age:Int = 18) à string{}
调用: addPerson(“tom”)
注:修改年龄时 addPerson(“Tom”,age:19)
二 ARC 和 MRC 内存管理
从 MRC—>ARC 就是将内存管理部分,从开发者的函数中转移到函数外部的runtime 中.因为 runtime 的开发简单,逻辑层次高,因此 runtime 的出错概率很小,另外因为编译器的优化,使得运行速度很高.
ARC 的特色:
三 NSURLConnettion , NSURLSession,AFN 以及SYNetFrame处理网络请求
1 NSURLConnettion
NSURLConnettion是 Core Foundation/CFNetwork框架 API 之上的一个抽象. NSURLConnettion是用来指代 Core Foundation 框架中的一系列组件: NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage 以及同名类 NSURLConnection.
注1:原来的使用原理:一个 NSURLRequest 发送给 NSURLConnect.被委托对象(遵照 NSURLConnectionDeledate 和 NSURLConnectionDataDeledate 非正式协议)异步返回一个 NSURLResponce 和服务器的 NSData.
注2:在一个请求发送给服务器的时候,系统会先查询缓存信息,而后根据策略和可用写的不一样,当在缓存中找到响应则直接返回.不然,系统将根据咱们的策略,将接到请求后的响应缓存到并返回.
注3:在把请求发送给服务器的时候,服务器会发出鉴权查询,这能够有共享的 cookie 或者机密存储来自动响应,或者由被委托的对象来响应.发送中的请求,也能够被 NSURLProtocol 拦截,以便在必要的时候,无缝的改变其请求.
NSURLConnettion是使用步骤:
1 获取一个 URL
2 经过 URL 建立一个请求
3 用NSURLConnettion发送请求
2 NSURLSession
和 NSURLConnection 同样, NSURLSession 不只仅包括同名的 NSURLSession, 还包括NSURLRequest 和 NSURLCache. 同时将NSURLConnection 对应为NSURLSession,NSURLSessionFiguration 以及NSURLSession 的三个子类,即NSURLSessionTask,NSURLSessionUpLoadTask 和 NSULSessionDownLoadTask.
和 NSURLConnection 相比, NSURLSession 最大的改变能够配置每个缓存的session 缓存, cookie 值,协议以及证书策略甚至跨程序共享这些信息.这保证了程序和网络框架之间的相互独立.每个 NSURLSession 有一个 NSURLSessionConfiguration 来进行初始化, NSURLSessionConfiguration指定了策略,以及在移动设备上加强性能的选项.
NSURLSession 的另外一个特色就是 session Task, 用来处理的上传和下载.和 NSURLConnection 最大的不一样之处在于,全部的 task 共享其创造者 NSURLSession.
注: NSURLSessionTask分析
NSURLSessionTask 是一个抽象类,里面包含NSURLSessionDataTask , NSURLSessionDownLoadTask 以及 NSURLSessionUpLoadTask三个子类.这三个子类封装了网络的基本任务:获取数据,上传和下载
使用原理:当一个 NSURLSessionDataTask 完成的时候,会有一个返回的数据,一个 NSURLSessionDownLoadTask 完成的时候会带一个临时文件的路径.文件上传的时候也会返回必定的数据,因此能够说 NSURLSessionUpLoadTask 是继承于 NSURLSessionDataTask.全部的 Task 均可以取消,暂停和恢复,当暂停的时候会记录当前的位置,以便下载继续今后点继续下载.须要说明的是 NSURLSessionTask 是由 NSURLSession 建立的.
NSURLSession的使用步骤:和 NSURLConnection 基本类似,而后使用resume方法来将它运行.
1 获取一个 URL
2 经过 URL 建立一个请求
2.1 建立一个上传的NSData(UpLoad 上传的时候用)
3 建立一个NSURLSession的单例
4 经过NSURLSession发送请求(注:使用 resume)
3 NSURLSession 和 NSURLConnection 的区别
NSURLSession即有 session 的代理方法又有 Task 的代理方法.session 的代理方法用来处理链接层的问题(服务器的信任,客户端证书的评估等),Task 的代理方法用来处理鉴权查询和与网络请求有关的问题.
4 AFN 框架
AFN 是对 NSURLConnection 的一层封装
AFN 的主要功能:
AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager(封装了经常使用的 HTTP 方法)
AFHTTPRequestOperationManager的属性
1 baseURL :开发者针要对 AFHTTPRequestOperationManager 自定义一个单例子类,设置 baseURL, 全部的网络访问,都只使用相对路径便可.
2 requestSerializer :请求数据格式/默认是二进制的 HTTP
3 responseSerializer :响应的数据格式/默认是 JSON 格式
4 operationQueue
5 reachabilityManager :网络链接管理器
AFHTTPRequestOperationManager方法:
1 manager :方便建立管理器的类方法
2 HTTPRequestOperationWithRequest :在访问服务器时,若是要告诉服务器一些附加信息,都须要在 Request 中设置
3 GET
4 POST
AFURLSessionManager
AFHTTPSessionManager(封装了经常使用的 HTTP 方法)
1 GET
2 POST
3 UIKit+AFNetWorking分类
4 NSProgress(利用 KVO)
AFURLRequestSerialization :请求的数据格式/默认是二进制的
AFURLResponseSerialization :响应的数据格式/默认是JSON格式
1 安全策略:(HTTPS 和AFSecurityPolicy)
2 网络检测: (对连接方式进行了封装和 AFNetWorkingReachabiliManager)
使用连接: http://www.cnblogs.com/worldtraveler/p/4736643.html
AFN 的使用步骤:
1 建立一个请求操做管理者
2 声明响应结果进行 JSON,XML等数据解析,返回 Data
3 设置请求参数
4 发送请求
补充 ASI: (功能很强大,可是已经不更新了)
ASI 使用步骤:
1 获取 URL
2 获取 ASI 请求对象
3 发送请求
AFN和ASI的区别
1、底层实现
1> AFN的底层基于OC的NSURLConnection和NSURLSession
2> ASI的底层基于纯C语言的CFNetwork框架
3> ASI的运行性能 高于 AFN
2、对服务器返回的数据处理
1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string
2> AFN提供了多种对服务器数据处理的方式
* JSON处理
* XML处理
* 其余处理
3、监听请求的过程
1> AFN提供了success和failure两个block来监听请求的过程(只能监听成功和失败)
* success : 请求成功后调用
* failure : 请求失败后调用
2> ASI提供了3套方案,每一套方案都能监听请求的完整过程
(监听请求开始、接收到响应头信息、接受到具体数据、接受完毕、请求失败)
* 成为代理,遵照协议,实现协议中的代理方法
* 成为代理,不遵照协议,自定义代理方法
* 设置block
4、在文件下载和文件上传的使用难易度
1> AFN
* 不容易监听下载进度和上传进度
* 不容易实现断点续传
* 通常只用来下载不大的文件
2> ASI
* 很是容易实现下载和上传
* 很是容易监听下载进度和上传进度
* 很是容易实现断点续传
* 下载或大或小的文件都行
5、ASI提供了更多的实用功能
1> 控制圈圈要不要在请求过程当中转
2> 能够轻松地设置请求之间的依赖:每个请求都是一个NSOperation对象
3> 能够统一管理全部请求(还专门提供了一个叫作ASINetworkQueue来管理全部的请求对象)
* 暂停\恢复\取消全部的请求
* 监听整个队列中全部请求的下载进度和上传进度
四 正式协议和非正式协议
正式协议:指的是一个以@ protocol方式命名的方法列表,它要求显示的采用协议.包括@required 和@optional.
正义协议的意义:将正义协议中的方法剥离出来
非正式协议:定义为凡是 NSObject的类或其子类的类别.非正式协议的方法是本身定义的
五 HTTP 的 TCP/UDP 协议
1 TCP/IP 或者 UDP/IP 协议组,包括三层网络协议即网络层,传输层,应用层.
网络层协议包括:IP 协议, ICMP 协议, ARP 协议, RARP 协议以及 BOOTP 协议.
传输层协议包括:TCP 和 UDP 协议
应用层协议包括:FTP,HTTP,SMTP,DNSTELNET 等.
TCP 须要三层握手, UDP 不须要
结论: HTTP 虽然是一个协议,可是其仍是基于 TCP 的协议.
2 scoket
socket 即 TCP/IP 或者 UDP/IP
Scoket 的优缺点:
优势:
缺点:
HTTP 协议的优缺点
优势:
缺点:
总结: Scoket 适用于对传输速度,安全性,实时交互,费用等要求较高的时候使用.HTTP则相反,适用于快速开发
六 JSON/XML 数据解析
1 XML 便可扩展标记语言(标记是计算机能够理解的语言,经过标记计算机就能够处理事件).可扩展性指的是:定义这些标记语言的时候,既可使用国际通用的语言(HTML),也可使用自定义的标记语言.
1.1 简单来讲, XML 是一种数据的描述语言,可是呢, XML 没有语言的基本功能即被计算机所读取,所以 XML 须要用另外一种语言来解读.
1.2 XML 的基本特色
1.3小结
XML 是独立于软件和硬件以外的一种语言,它在 Web 中的做用几乎和 HTML 同样重要.XML 无处不在,它是软件中传递的最经常使用的数据格式.而且愈来愈流行.
注: XML 能够用于移动端和 PC 端,它是用来保存和传输数据的, HTML 是用来展现数据.
1.4 XML 的特色
1.5 XML 的解析方式 DOM 和 SAX 解析
1.5.1 XML 的整体解析步骤:
1.5.2 DOM 和 SAX
DOM 即文档对象类型, SAX即当前两个主要使用的 API
1.5.3 DOM 和 SAX 的区别
> DOM 解析的时候将数据一次性读入内存并进行解析, XML 解析的时候是以流的方式,边读入边解析.所以对于比较大的 XML 是不适合用 DOM 解析的.
> DOM 用来处理 XML 文档比较复杂或者随机的处理 XML 文档中的数据.而 SAX 处理的时候则是从头至尾的一个个节点进行处理
2 JSON 解析
JSON 构建于两种结构:(相似于)键值对和值的有序列表
2.1 JSON 的解析方法有: NSJSONSerialization(原生),TouchJson,SBJSON,
JSONKit.
2.2 JSON 解析步骤
2.3 JSON解析方法: http://blog.csdn.net/enuola/article/details/7903632/
3 XML 和 JSON 的区别
JSON:没有结束标签,更短,读写速度快,可以使用内建的方法进行解析,使用数组,不使用保留字.总之 JSON 是一种轻量型的数据解析格式.
七 GCD 和 NSOperation
1 pthread 是 C 语言中的线程方式,很少作要求(了解)
建立方式: int resurt = pthread_creat(&pthread,NULL,demo,NULL);
2 NSThread 建立方式
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
[self performSelectorInBackground:@selector(run) withObject:nil];
3 GCD
3.1使用消息循环的时候必须指定的两个条件:输入源和循环方式
Runloop 接收输入事件的来源有两种:输入源和定时源.
消息循环的两种方式: NSDefaultRunloopMode和 NSRunloopCommenModels
3.2 主线程的消息循环默认是开启的,子线程的消息循环须要手动开启方式以下:
[[NSRunloop currentRunloop] run];
3.3 GCD的执行步骤
> 建立任务
> 将任务添加到队列中
3.4 GCD 的两种执行任务的函数:同步执行函数(dispatch_sync)和异步执行函数(dispatch_async)
3.5 同步和异步函数决定了要不要开启子线程,并发队列和串行队列决定了执行的方式.
3.6 主队列:若主线程正在执行代码,则不调度线程等待主线程执行完成
主队列同步执行---形成死锁.
缘由:主队列等待主线程执行完毕,主线程等待主队列空闲
主队列和串行队列的区别:
串行队列:等上一个任务完成以后再调用当前任务
主队列:在主线程上运行的队列.当主线程上有任务执行的时候,不调度任务
3.7 全局队列在本质上是并发队列
3.8 比较
3.9 GCD 的特色
延迟操做:dispatch_after即在多少纳秒以后,在那个队列上,执行哪些操做
一次性执行:线程安全,能够代替互斥锁的使用
调度组:多个异步任务完成以后再作其余操做即dispatch_group_t
4 NSOperation
4.1 NSOperation是一个抽象类
抽象类特色:不能直接使用,由于它的方法在本身的类中没有实现,约束子类具备相同的属性和方法,所以抽象类要使用子类
4.2 NSOperation的子类有三种
NSInvocationOperation,NSBlockOperation 和自定义的 operation
4.3 NSOperation 和 NSOperationQueue
先将要执行的操做封装到NSOperation 中,而后再将NSOperation添加到NSOperationQueue 中.系统会将任务取出,并放在新线程上执行
NSOperation执行的时候默认是不会开启新线程的,可是添加到NSOperationQueue 中后会开启新线程
4.4 NSOperation和 GCD 比较
> GCD 是在 iOS4.0以后出现的,是对多核 CPU 作了优化,是 C 语言是技术
GCD 是将任务添加到队列并以同步/异步执行的函数
GCD 的特色:延迟操做,一次性执行和调度组
> NSOperation iOS2.0推出,4.0后根据 GCD进行了重写
将操做添加到队列,就会自动执行操做的函数
特色:最大并发数,队列的暂停/继续,取消所有队列的操做,指定操做间的依赖关系
最大并发数:同时执行的任务数.
注:指定完后,线程先去线程池中寻找有可用的线程,没有找到后再建立新线程.而且线程执行完后放入线程池中,以待重用.
4.5 服务质量qualityOfService 用来设置操做的优先级
4.6 监听操做的完成
4.7 设置操做依赖: [opB addDependence:opA];操做 B 依赖于操做 A
八 自动布局
1 自动布局通过的三个时期
MagicNumber -> autoresizingMask -> autolayout(6.0)
2 Masonry的使用
语法通常是 make.equalTo or make.greaterThanOrEqualTo or make.lessThanOrEqualTo + 倍数和位移修正
九 KVC KVO
1 KVC 键值编码
1.1 做用:KVC 提供了一种在运行状态而非编译状态状况下动态访问对象的属性/成员变量的方法.即 KVC 能够经过名称使用该名称的属性.
1.2 使用注意:
1.3 实现原理
2 KVO 键值监听 保持视图和模型的同步
2.1 做用:当指定的对象发生改变的时候,该对象就会接收到通知.即每次指定的观察者发生改变的时候,就会通知相应的观察者
2.2 使用方法:
2.3 特色:当更改被监听的值的时候,监听者会当即接收到通知
2.4 KVO中谁要监听谁注册,而后对响应进行处理,使得观察者与被观察者彻底解耦。KVO只检测类中的属性,而且属性名都是经过NSString来查找,编译器不会检错和补全,所有取决于本身
3 二者之间的关系
KVC 是 KVO 实现的关键技术
十 通知,代理, block 以及单例设计模式
1 简单对比
1.1 通知:
特色:一对多,多对多,多对一
原理:任何观察者只要接收通知的名称和发送者发送通知的名称相同,则就会接到发送者发送的通知消息
实现步骤:发送通知,注册观察者接收通知,移除通知
1.2 代理
特色:一对一
原理:首先分清代理和被代理者.即被代理者不适合作某一件事,让代理来作
使用步骤:(如图 注: B 是被代理者, A 是代理)
1.3 block
block 是一个代码块,它能够传递任何数据
特色:一对一
原理:就是 block 函数的使用,即在一个地方声明一个block, 在使用的时候,只要在使用的时候调用便可
使用步骤:首先建立一个 block 函数,在须要的地方调用 block 函数
1.4 单例设计模式
单例:即一个类中只有一个实例,而且自行实例化后能够在整个类中使用
使用步骤:
十一 四种动画
1 动画的三要素
1.1 CALayer和 UIView 很类似, UIView 有的功能 CALayer 基本上都有,所以说 CALayer 是覆盖在 UIView 上薄薄的一层.UIView 和 CALayer 的区别是: UIView 上有点击事件.CALayer 的用途有:一是对 view 的相关属性设置(如圆角等),二是对 View 的动画操做,所以能够说对 view 上的动画操做,本质上是对 view 上的 layer 操做
1.2 CAAnimation 即动画的分类
CABasicAnimation(基础动画):
经过设定起点,终点,时间,动画会沿着设置点进行移动.
CAKeyframeAnimation(关键帧动画):
即关键点的 frame,就是经过设置起点,中间的关键点,终点和时间, CALayer 就会沿着设定的点移动.
CAAnimationGroup(组动画):
即将多个动画或者多种动画组合成一个组里面依次运行.
CATransition(转场动画):
苹果原生的一些特定的动画
2 动画的实现步骤
2.1 CALayer 的初始化并设置属性
2.2 设置动画的类型并设置动画的属性
2.3 添加动画
十二 数据库的使用
数据存储的方式:plist,归档(NSKeyedArchiver),偏好设置(NSUserDefaults),write 写入文件,SQLite,Cocoa Data
使用方式:
http://www.jianshu.com/p/933a035a6ad4
http://www.jianshu.com/p/14fd706b632d
十四 第三方 SDK 集成
注册成为开发者à下载 SDKà看文档
十五 runtime
运行时即在程序运行的时候要干的事情.
产生的缘由是 C 语言中函数的执行是在编译的时候就决定好了的,要执行的函数以及函数的执行顺序等.OC是继承于 C 的,是在 C 的基础上添加了面向对象的特性,面向对象要求把编译和连接的函数尽可能向后推迟.OC和 C 有很大的不一样,其中就包括 OC 的函数, OC 函数的调用属于动态调用,就是说 OC 中在编译的阶段仅仅编译一部分函数,而大部分函数是在程序运行的时候才动态编译的,这就须要用到运行时.
运行时能够在程序运行的时候在动态的编译和连接函数.同时运行时还具备自省即查看对象正在作的,不能作的以及合适的分发消息
更深刻的了解:
OC 的 runtime 是一个运行时库,它是一个主要有 C 语言和汇编语言写成库,给 C 添加了面向对象的特性建立了 OC.也就是说它是在类方法中被加载,完成方法的分发,方法的转发等.OC 的 runtime 创造了全部的结构体,从而让面向对象成为可能.
详细了解: http://www.cocoachina.com/ios/20141008/9844.html
十七 APPWatch 和 XMPP
1 APPWatch的功能实现和控件基本和 iOS 一致的.
使用的注意点:
2 XMPP 即时通信
即时通信的实质是实时.
XMPP 实现步骤:节点链接服务器à服务器利用本地目录系统中的证书对其认证à节点指定目标地址,服务器告知目标状态à服务器查找链接并认证à节点之间进行交互
注: 只要知道程序的协议和程序的端口就能进行交互
十八 BUG 调试
http://stackoverflow.com
十九 git 和 SVN 及其比较
1 SVN属于集中化版本控制系统,能够理解为 SVN = 版本控制+备份服务器.SVN 支持并行读写文件,支持代码的版本化管理.其功能包括取出,导入,更新,分支,还原,更名等
特色: SVN 大多采用图形化管理,易于上手.
2 Git 是一个分布式版本管理系统,其功能包括clone,pull,push,branch,merge,
rebase.
特色:程序代码版本化管理
3 SVN 和 Git 的优缺点
3.1 SVN 的优缺点: SVN对中文支持好,操做简单,使用没有难度,实施人员均可轻松上手。使用界面统一,功能完善,操做方便
3.2 Git 的优缺点: 对`程序源代码进行差别化的版本管理,代码库占极少的空间。易于代码的分支化管理。不支持中文,图形界面支持差,使用难度大。不易推广。
4 总结: SVN更适用于项目管理, Git仅适用于代码管理。