对比 |
ASI | AFN |
更新状态 | 2012年10月份,已经中止更新 | 持续更新中,目前已更新至2.0版 |
介绍 |
ASI的直接操做对象ASIHTTPRequest,是一个实现了了NSCopying协议的NSOperation子类。
在initialize和initWithURL:方法中初始化相关属性并配置一系列请求相关参数默认值。此外,ASIHTTPRequest还提供了一系列的实例方法用来配置请求对象。
|
AFN的直接操做对象AFHTTPClient,是一个实现了NSCoding和NSCopying协议的NSObject子类。AFHTTPClient是一个封装了一系列操做方法的“工具类”,处理请求的操做类是一系列单独的,基于NSOperation封装的,AFURLConnectionOperation的子类。 |
线程处理模式 |
每个请求都由构造方法初始化一个(共享)实例,经过这个实例配置参数并发起请求。ASI最初使用delegate模式回调,在iOS SDK支持Block以后也提供了注册Block的实例方法。
ASI采起的是CFHTTP请求完成,直接回调ASIHTTPRequest的实例方法,经过储存的实例对象记录的信息完成Delegate模式或Block模式的回调。
在异步请求的处理上,ASIHTTPRequest对象初始化结束后,在startAsynchronous方法中把对象加入共享操做队列。此后,包括建立CFHTTPMessageRef,也就是处理网络请求的主要对象(事实上是一个指向__CFHTTPMessage结构的指针),在内的全部操做都在ASIHTTPRequest对象所属的子线程中完成。
|
AFN的示例代码中经过一个静态方法,使用dispatch_once()的方式建立AFHTTPClient的共享实例,这也是官方建议的使用方法。在建立AFHTTPClient的初始化方法中,建立了OperationQueue并设置一系列参数默认值。在getPath:parameters:success:failure方法中建立NSURLRequest,以NSURLRequest对象实例做为参数,建立一个NSOperation,并加入在初始化发方中建立的NSOperationQueue。
以上操做都是在主线程中完成的。在NSOperation的start方法中,以此前建立的NSURLRequest对象为参数建立NSURLConnection并开启连结。
|
数据处理模式 | ASI在这方面显得更原始,没有针对任何数据类型作特别封装,只是预留了各类接口和工具供开发者自行扩展。 | AFN针对JSON、XML、PList和Image四种数据结构封装了各自处理器,开发者能够把处理器注册到操做队列中,直接在回调方法中得到格式化之后的数据。 |
同步请求 |
ASI则是直接经过调用一个startSynchronous方法。
|
AFN默认没有封装同步请求,若是开发者须要使用同步请求,则须要重写getPath:parameters:success:failure方法,对AFHTTPRequestOperation进行同步处理 |
异步回调的处理 | 【使用AFNetworking进行网络异步请求时,block:(void(^)代码块实际返回到UI主线程中。即便在子线程中使用AFNetWorking进行网络的异步请求,block:(void(^)代码块仍然返回到UI主线程中(AF框架,它里面已经create了异步线程 )。所以不管当前处在主线程仍是子线程,异步返回均返回到UI主线程中。】 |
为一系列相关的请求定义一个HTTPClient,共用一个BaseURL。每次请求把URL中除BaseURL的Path部分作为参数传给HTTPClient的静态方法,并注册一个Block用于回调。
AFN则直接使用了NSOperation的completionBlock属性。
|
基于的底层开发框架
|
CFNetwork框架
使用CFnetwork而不是Cocoa框架NSURL有几点好处。CFNetwork更加专一于网络协议,而NSURL更加专一于数据访问,好比经过HTTP或者FTP传输数据。尽管NSURL的确也提供了一些可配置功能,但是CFNetwork提供的要多的多。另外NSURL还须要你使用Objective_c。若是作不到这点的话,仍是应该使用CFNetwork
|
NSURL
【使用iOS5.0 SDK NSURLConnection:
一、进行网络同步请求(sendSynchronousRequest)时,调用该请求接口的操做在哪一个线程,同步返回的网络结果就处于哪一个线程,所以一般进行网络同步请求时,为了不阻塞UI主线程,须要在子线程中进行网络请求;
二、进行网络异步请求(sendAsynchronousRequest)时,block:(void(^)代码块实际返回到子线程中。所以,此时如须要向UI线程发送通知,则须要跳转到主线程中发送通知dispatch_async(dispatch_get_main_queue(), ^{});】
|
底层开发矿建介绍 |
CFNetwork是基于Core Foundation中CFStream的一个底层高性能网络框架,它由提供基础服务的CFSocketStream,支持HTTP协议的CFHTTP,基于CFHTTP用于身份认证的CFHTTPAuthentication和支持FTP协议的CFFTP组成。
Core Foundation框架中的CFSocket就是基于BSD Socket开发的。它几乎涵盖了BSD Socket的所有功能,更重要的是把Socket整合到事件的处理循环中。Core Founda-tion中较高层的CFStream是基于CFSocket开发的读写流支持。
|
如图所示,ASI是基于CFHTTP开发的一个组件;而AFN的基础——NSURL,也是基于CFNetwork开发的,也就是说ASI相比AFN更加底层。 |
性能对比 | AFN请求优于ASI | |
总结 | ASI更适合已经发展了一段时间的应用,或者开发资源相对丰富的团队,由于每每这些团队(或他们的应用)已经积累了必定的经验,不管是产品上仍是技术上的。需求复杂度就是在这种时候高起来,并且底层订制的需求也愈来愈多,此时AFN就很难知足需求,须要牺牲必定的易用性,使用ASI做为网络底层控件。 | AFN适合逻辑简单的应用,或者更适合开发资源尚不丰富的团队,由于AFN的易用性要比ASI好不少,而这样的应用(或团队)对底层网络控件的定制化要求也很是低。 |
一、alloc 建立对象,分配空间html
二、init (initWithNibName )初始化对象,初始化数据java
三、loadView 从nib载入视图,一般这一步不须要去干涉。除非你没有使用xib文件建立ios
四、viewDidLoad载入完成,能够进行自定义数据以及动态建立其余控件程序员
五、viewWillAppear视图将出如今屏幕以前,立刻这个视图就会被展示在屏幕上了web
六、viewDidAppear 视图已在屏幕上渲染完成面试
当一个视图被移除屏幕而且销毁的时候的执行顺序,这个顺序差很少和上面的相反算法
一、viewWillDisappear视图将被从屏幕上移除以前执行sql
二、viewDidDisappear视图已经被从屏幕上移除,用户看不到这个视图了数据库
3.viewUnLoad 编程
四、dealloc视图被销毁,此处须要对你在init和viewDidLoad中建立的对象进行
iOS开发数据库篇—SQLite简单介绍
1、离线缓存
1.ios中数据的存储方式
(1)Plist(NSArray\NSDictionary)
(2)Preference(偏好设置\NSUserDefaults)
(3)NSCoding(NSKeyedArchiver\NSkeyedUnarchiver)
(4)SQLite3
(5)Core Data
说明:
(1)什么是SQLite?
答:SQLite是一款轻型的嵌入式数据库,安卓和ios开发使用的都是SQLite数据库
(2)特色(优势)
答:1)它占用资源很是的低,在嵌入式设备中,可能只须要几百K的内存就够了
2)它的处理速度比Mysql、PostgreSQL这两款著名的数据库都还快
(3)什么是数据库
答:数据库(Database)是按照数据结构来组织、存储和管理数据的仓库
(4)数据库的分类
答:能够分为2大种类
关系型数据库(主流)和对象型数据库(直接把内存中的对象塞入到数据库,对比关系型数据库而言性能不能很好,效率不高)
(5)经常使用关系型数据库有哪些?
答:PC端:Oracle、MySQL、SQL Server、Access、DB二、Sybase
嵌入式\移动客户端:SQLite
(6)数据库是如何存储数据的?
答:数据库的存储结构和excel很像,以表(table)为单位 。表由多个字段(列、属性、column)组成,表里面的每一行数据称为记录
(7)数据库存储数据的步骤?
1)新建一张表(table)
2)添加多个字段(column,列,属性)
3)添加多行记录(row,record,每行存放多个字段对应的值)
3、Navicat
Navicat是一款著名的数据库管理软件,支持大部分主流数据库(包括SQLite)
*进程是指在系统中正在运行的一个应用程序
*1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程)
线程是进程的基本执行单元,一个进程(程序)的全部任务都在线程中执行
好比使用酷狗播放音乐、使用迅雷下载电影,都须要在线程中执行
*iOS有三种多线程编程的技术,分别是:NSThread 、Cocoa NSOperation 、GCD。 这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的。
NSThread:
优势:NSThread 比其余两个轻量级
缺点:须要本身管理线程的生命周期,线程同步。线程同步对数据的加锁会有必定的系统开销
Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其余的对称多处理系统的系统。这创建在任务并行执行的线程池模式的基础上的。
GCD的工做原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。
一个任务能够是一个函数(function)或者是一个block。 GCD的底层依然是用线程实现,不过这样可让程序员不用关注实现的细节。
GCD会自动根据任务在多核处理器上分配资源,优化程序
GCD中的FIFO队列称为dispatch queue,它能够保证先进来的任务先获得执行。