标签:
一 OC 小结
1 什么是 OC 语言?
OC 语言即面向对象语言,它扩展了 ANSI C 语言,将 SmallTalk 式的消息传递机制加入到 ANSI C 中.它是苹果 OS 和 iOS 以及相关的 API,Cocoa 和 Cocoa Touch 的主要编程语言.
2 OC 语言的特点:
3 iOS 的生态系统不仅仅指其软件方面的丰富,更多指的是其设备的多样性.
4 Core OS
是用 FreeBSD 和Mach所改写的Darwin,是开源的符合 POSIX 标准的一个 UNIX 核心.该层包含所有 iOS 的基础功能(所有的这些功能都是通过 C 语言的 API 来提供的).另外该层具有 UNIX 特点,因此当将 UNIX 上的功能移植到 iOS 上的时候用到Core OS 的 API.同时该层还提供了硬件和系统框架之间的接口,但出于安全考虑,只有有限的框架能使用.
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> AFN的底层基于OC的NSURLConnection和NSURLSession
2> ASI的底层基于纯C语言的CFNetwork框架
3> ASI的运行性能 高于 AFN
二、对服务器返回的数据处理
1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string
2> AFN提供了多种对服务器数据处理的方式
* JSON处理
* XML处理
* 其他处理
三、监听请求的过程
1> AFN提供了success和failure两个block来监听请求的过程(只能监听成功和失败)
* success : 请求成功后调用
* failure : 请求失败后调用
2> ASI提供了3套方案,每一套方案都能监听请求的完整过程
(监听请求开始、接收到响应头信息、接受到具体数据、接受完毕、请求失败)
* 成为代理,遵守协议,实现协议中的代理方法
* 成为代理,不遵守协议,自定义代理方法
* 设置block
四、在文件下载和文件上传的使用难易度
1> AFN
* 不容易监听下载进度和上传进度
* 不容易实现断点续传
* 一般只用来下载不大的文件
2> ASI
* 非常容易实现下载和上传
* 非常容易监听下载进度和上传进度
* 非常容易实现断点续传
* 下载或大或小的文件都行
五、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仅适用于代码管理。
标签:
原文地址:http://www.cnblogs.com/xuan-yuan/p/5802378.html