11月24日修正一处错误:1八、19题目同样,答案不同(实际上是两种理解,修改成最优的一种放上来.多谢yf521t提醒)php
<小码哥社区 — Timhbw>iOS基础问答面试题连载(一)-附答案 <小码哥社区 — Timhbw>iOS基础问答面试题连载(二)-附答案 <小码哥社区 — Timhbw>iOS基础问答面试题连载(三)-附答案git 1.请简单说明多线程技术的优势和缺点?github
- 优势:
- 1.可以适当提升程序的执行效率;
- 2.可以适当的提升资源的利用率,好比CPU、内存。
- 缺点:
- 1.建立线程有额外开销
- 2.程序的代码更加复杂
- 3.线程越多,CPU在调度线程上的开销就越大
- 4.若是开启大量线程,反而会下降程序的性能
2.请简单说明线程和进程,以及他们之间的关系?
- 1.进程是CPU调度和分配资源的单位。
- 2.线程是CPU调用的最小单位
- 关系:
- 1.进程包含线程;
- 2.一个程序能够对应多个进程,一个进程中能够有多个线程,但至少要有一个线程;
- 3.同一个进程内的线程共享进程的资源。
3.请简单说明在iOS开发中有哪些多线程的实现方案?
- 1.PThread
- 2.NSThread
- 3.GCD
- 4.NSOperation
4.请简单说明主线程的做用,以及使用注意点?
- 主线程:默认启动的线程
- 做用:(1)显示和刷新UI界面 (2)处理UI事件
- 注意点:
- 1.不要将耗时操做放在主线程中执行
- 2.UI操做必须在主线程中执行 !!!!
5.请简单列出NSThread线程的几种状态,并说明状态转换的逻辑?
-
新建->就绪 CPU调度当前任务->运行->阻塞->死亡
-
CPU调度其余任务->就绪
6.请简单说明如何简单的解决多线程访问同一块资源形成的线程安全的问题,以及注意点?
- 加同步(互斥)锁,
- @synchronized
- OC中的同步锁:(锁对象) + {要锁住的代码}
- 锁对象:要求是全局惟一的属性
- 注意点:
- 1.要注意加锁的位置
- 2.加锁须要耗费性能,所以须要注意加锁的条件(多线程访问同一块资源)
- 3.专业术语:线程同步
7.请简单介绍下什么是原子和非原子属性?
- atomic:原子属性,会为setter方法加锁,默认为atomic。线程安全,会消耗大量资源
- nonatomic:非原子属性,不会为setter方法加锁。非线程安全,适合内存小的移动设备。
8.请简单介绍下GCD这门技术?
- 全称 Grand Central Dispatch,牛逼的中枢调度器。
- GCD中有2个核心概念:任务和队列。
- GCD使用:封装任务,将封装好的任务添加到队列中,遵循FIFO。
9.请简单介绍GCD中的几种队列?(4种)
10.若是当前有多个任务,这些任务都须要开子线程执行,而多个任务之间有必定的依赖关系,若是使用GCD来实现请试着给出一些解决方案。
11.请简单说明单例模式的特色(做用)?
-
若是一个类实现了单例,那么能够保证在程序运行过程,一个类只有一个实例json
-
单例对象易于供外界访问(一般会提供一个类方法)数组
-
实现了单例模式后,能够方便地控制了实例个数,并节约系统资源浏览器
12.请简单介绍操做队列?
-
操做队列自己是OC语言的,在iOS开发中能够用来实现多线程编程缓存
-
操做队列有两大核心的概念,一个是操做(NSOperation),一个是队列(NSOperationQueue),操做用来封装任务,队列用来存放操做
-
要使用操做队列进行多线程编程,只须要把封装好的操做提交到相应的队列中便可,系统内部会视状况自动开启相应的线程来执行任务
-
在操做队列这门技术中,系统提供了两个子类能够来封装任务,一个是NSInvocationOperation,一个是NSBlockOperation,除此以外也能够直接自定义操做
-
操做队列中有两种队列,一种是经过[NSOperationQueue mainQueue]得到的主队列,一种是经过[[NSOperationQueue alloc]init]方法得到的非主队列
-
主队列是和主线程相关的串行队列,提交到主队列中的操做将被安排在主线程中执行(能够利用该特性来处理线程间通讯的相关逻辑)
-
操做+队列:
-
NSInvocationOperation
-
NSBlockOperatio
-
NSOperationQueue
13.若是有多个操做如何来设置依赖关系,如何监听到某个操做执行完毕事件?
-
1.设置依赖关系:假设有有两个操做分别是op1和op2,op1须要依赖于op2,那么只须要使用[op1 addDependency:op2]方法设置便可。
-
2.操做依赖补充:使用操做队列能够方便的指定多个操做间的依赖关系,甚至能够实现跨队列的操做依赖,可是在使用的时候须要注意操做之间不能有循环依赖关系
-
3.操做监听:可使用^completionBlock来实现操做监听
14.请简单比较GCD中的全局并发队列和使用dispatch_queue_create函数建立的并发队列异同?
-
1.全局并发队列在整个应用程序中自己是默认存在的而且对应有高优先级、默认优先级、低优先级和后台优先级一共四个并发队列,咱们只是选择其中的一个直接拿来用。而Create函数是实打实的从头开始去建立一个队列。
-
2.在iOS6.0以前,在GCD中凡是使用了带Create和retain的函数在最后都须要作一次release操做。而主队列和全局并发队列不须要咱们手动release。固然了,在iOS6.0以后GCD已经被归入到了ARC的内存管理范畴中,即使是使用retain或者create函数建立的对象也再也不须要开发人员手动释放,咱们像对待普通OC对象同样对待GCD就OK。
-
3.在使用栅栏函数的时候,栅栏函数只有在和使用create函数本身的建立的并发队列一块儿使用的时候才有效
-
4.其它区别涉及到XNU内核的系统级线程编程,不一一列举。
15.请简单说明对图片进行二级缓存的实现思路?
-
在显示图片的时候
-
1.先检查该图片对应的内存缓存
-
1.若是存在内存缓存,则
-
2.若是内存缓存中没有,则
- a.继续检查该图片对应的磁盘缓存是否存在,跳转到第2步。
-
2.检查该图片对应的磁盘缓存
16.请简单对比下GCD和NSOperation两种多线程的实现方案?
-
GCD是纯C语言的API,而操做队列则是Object-C的对象。
-
在GCD中,任务用块(block)来表示,而块是个轻量级的数据结构;相反操做队列中的『操做』NSOperation则是个更加剧量级的Object-C对象。
-
具体该使用GCD仍是使用NSOperation须要看具体的状况,若是只是想简单开一个子线程执行任务推荐使用GCD,若是有不少任务须要开多个子线程下载推荐使用操做队列
17.请按照本身的理解,说一说在进行多线程编程的时候相对于GCD而言,操做队列有哪些优点?
18.请谈一谈,自定义操做的好处?
19.请简单介绍GCD中的一次性代码?
-
static dispatch_once_t onceToken;
-
dispatch_once(&onceToken, ^{
-
NSLog(@"-------");
-
});
-
2.特色:
- 在整个程序运行过程当中block中的代码只会被执行一次
-
- 一次性代码自己是线程安全的
-
3.经常使用于单例模式的实现中
20.GCD中的dispatch_after是延迟把任务提交到队列仍是先提交到队列再延迟执行?
- 是延迟以后在把任务提交到队列执行,把任务提交到队列中在延迟执行难度较大,不容易实现.
21.请说明NSRunloop和线程的关系?
22.请简单说明NSCache的特色
-
NSCache是苹果推出专门用来处理内存缓存的类
-
NSCache默认是线程安全的,在使用的时候能够不用考虑线程安全的问题
-
NSCache使用方法和可变字典相似,当缓存文件超过最大限度的时候会开启一个回收过程,把最老的缓存对象回收
-
NSCache能够设置缓存的const(成本)和缓存的数量
23.请简单说明runloop中几个类之间的相互关系(runloop & source & timer &observer &mode)
-
runloop启动以后会选择一种运行模式,在执行执行会先检查运行模式内部是否有source和timers,若是一个sourc或者是一个timer都没有那么runlooop启动以后就马上退出了。
-
runlooop的source有两种分类方法,按照之前的分类方法能够分为
-
observer,能够用来监听当前runloop运行状态的改变,注意(Core foundation框架)
-
NSTimer必须添加到runloop中才会工做,且其工做收到runloop运行模式的影响。
24.请简单介绍下SDWebImage框架?
-
SDWebImage框架是一款很是流行的用来处理图片下载和缓存的第三方框架
-
SDWebImage框架为咱们提供了高性能异步下载图片的方案,内部使用GCD等多线程相关技术
-
使用SDWebImage框架来下载图片,它内部默认会对图片进行内存缓存和磁盘缓存的二级缓存结构
-
该框架为UIButton,UIImageView等UI控件提供了分类,可以方便的处理相关控件图片的远程下载和缓存设置
-
该框架内部还提供了GIF图片播放,判断图片类型等通常功能
25.请问SDWebImage框架内部在清理磁盘缓存的时候clearDisk方法和cleanDisk方法有什么区别?
-
clearDisk:直接把整个缓存文件删除,删除以后建立一个新的空文件;
-
cleanDisk:先删除过时的缓存文件,而后计算当前剩余缓存文件的大小,若是该数值超过设定的最大缓存大小,那么久安全文件建立的时间从远到近依次删除,直到整个剩余缓存文件大小小于设定的最大缓存大小为止。
26.请问SDWebImage框架的框架结构是怎么样的?
27.请问SDWebImage框架内部怎么处理内存缓存的?
28.请简单说明NSRunloop的基本做用?
29.什么是runloop?
-
从字面意思看:运行循环、跑圈.其实它内部就是do-while循环,在这个循环内部不断地处理各类任务(好比Source、Timer、Observer)
-
一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(调用run方法)
-
RunLoop只能选择一个Mode启动,若是当前Mode中没
何Source(Sources0、Sources1)、Timer,那么就直接退出RunLoop 30.runloop的自动释放池何时建立释放?
31.请简单说明使用NSURLConnection发送网络请求的几种方法?
-
使用NSURLConnection发送同步请求([NSURLConnection sendSync….])
-
使用NSURLConnection发送异步请求1([NSURLConnection sendAsync…])
-
使用NSURLConnection发送异步请求2(设置代理,再发送网络请求)
-
同步 NSData *data = [NSURLConnection sendSync....]
-
异步 [NSURLConnection sendAsync]
-
代理 delegate
32.请简单说明GET请求和POST个请求有什么区别,如何选择?
-
GET请求的参数直接用&拼接并以?为分隔拼接在请求URL的后面
-
POST请求的参数是转换为二进制设置在请求体传递的
-
若是仅仅只是索取数据得到数据,那么建议使用GET请求,其余状况则建议使用POST请求,相对而言POST请求安全性更好一些。
33.请简单列出使用NSURLConnection发送一个异步POST网络请求的步骤?
34.请简单说明HTTP通讯的过程?
-
1.请求:若是客户端想要得到相应的数据,那么就对着服务器发送一个请求,请求是客户端向服务器索要数据的过程。
-
2.响应:服务器接收到客户端的请求以后,须要对该请求做出反应,响应是服务器端把数据返回给客户端的过程。
-
3.请求分为两部分,一个是请求头,一个是请求体(GET请求没有请求体)。其中请求头是对客户端信息和请求自己的描述,而请求体存放要发送给服务器端的具体数据
-
4.响应分为两部分,一个是响应头,一个是响应体。其中响应头是对服务器端信息和响应数据自己的描述,而响应体存放要发送给客户端的具体数据。
35.请简单说明NSURLSession对比NSURLConnection的优点?
-
session支持http2.0协议(iOS 9.0 +)
-
在处理下载任务的时候能够直接把数据下载到磁盘
-
支持后台下载|上传
-
同一个session发送多个请求,只须要创建一次链接(复用了TCP)
-
提供了全局的session而且能够统一配置,使用更加方便
-
下载的时候是多线程异步处理的效率更高
36.请简单列出NSURLSession发送POST请求的步骤?
-
1.肯定请求路径(NSURL)
-
2.建立可变的请求对象(NSMutableURLRequest)
-
3.修改请求方法为POST(HTTPMethod)
-
4.把要传递的参数拼接,转换为二进制数据,设置为请求体(HTTPBody)
-
5.建立会话对象(NSURLSession shareSession)
-
6.根据会话对象来建立一个NSURLSessionDataTask任务
-
7.执行请求Task (须要调用Resume方法)
-
8.拿到服务器返回的数据以后,解析数据
37.在发送网络请求的时候,若是请求路径中的参数有中文致使发送的网络请求失败,应该如何处理?
-
[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
38.观察下面的代码,请问completionHandler在主线程仍是子线程执行?
-
[[session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
-
-
-
//....
-
-
-
}] resume];
- completionHandler在子线程中执行。
39.请简单介绍下网络响应的状态码?
-
状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户能够知道服务器端是正常处理了请求仍是出现了错误。
-
如200 OK状态码以3位数字+缘由短语组成。数字中的第一位指定了响应的类别, 后两位无分类。
-
状态码分为五种类别,分别是:
-
以1开头的(如100),定义范围为100~101,表示接收的请求正在处理,缘由短语为Informational(信息性状 态码)。
-
以2开头的(如200),定义范围为200~206,表示请求正常处理完毕,缘由短语为Success(成功状态码)。
-
以3开头的(如300),定义范围为300~305,表示须要进行附加的操做以完成网络请求,缘由短语为Redirection(重定向状态 码)。
-
以4开头的(如404),定义范围为400~415,表示客户端有错误,服务器没法处理请求,缘由短语为Client error(客户端错误)。
-
以5开头的(如500),定义范围为500~505,表示服务器端处理请求出错,缘由短语为Server error(服务器错误)。
40.使用NSURLSession发送网络请求的时候,最多能够创建多少个TCP链接?
-
在iOS中最多能够创建4个链接,在OSX中默认最多能够创建6个链接。
-
在iOS中NSURLSessionConguration内部有HTTPMaximumConnectionsPerHost 属性,能够设置链接的数 量:The default value is 6 in OS X, or 4 in iOS
-
说明:
-
因为HTTP/1.1 不支持多路复用,所以若是要处理多个网络请求,在处理HTTP请求的时候 多数浏览器厂商都是不假思索的就在客户端排队全部的HTTP请求,而后经过一个持久链接,一个接着一个的发送这些请求。然而这种方式性能实在太差。实际上,浏览器开发商对于对于此性能问题,尚没有任何更好的办法,所以只能容许客户端并行打开多个TCP链接会话。可是具体最多能够打开多少个TCP链接是有数量限制的, 多数现代的浏览器,包括桌面和移动浏览器,都支持打开6个链接。即客户端能够并行分派最多6个请求,服务器能够并行处理最多6个请求。
-
为何是6个链接?有什么特殊的意义吗?其实,这个数字是多方平衡后的结果:这个数字越大,便可以带来更多的请求并行能力,可是一样的客户端和服务器端所占用的资源也会越多。所以,每一个主机6个链接只不过是你们都以为比较安全,可以接受的一个数字而已。
41.请简单介绍JSON和XML?
-
JSON和XML都是一种用来表示数据的一种数据格式,JSON更加轻量级。
-
服务器返回的数据一般是JSON的或者是XML的两种,JSON数据格式和OC对象中字典和数组有些类似,XML又称为XML文档,XML的语法结构由三部分构成分别是文档声明,元素和属性。
-
若是服务器返回的数据是JSON,那么在开发中一般须要对JSON数据进行反序列化处理,把JSON数据转换为OC对象。
-
若是服务器返回的数据是XML格式的,那么须要对XML文档进行解析,解析XML的方式有两种,分别是SAX(从根元素开始解析)和DOM(先把整个XML文档加载进内存再解析)
42.JSON格式中的true和false,对应OC中的什么数据类型,值为多少?
43.请简单说明什么是序列化和反序列处理,用到了什么方法?
-
反序列化处理,即把JSON数据—->OC对象,使用的方法为:[NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil]
-
序列化处理,即把OC对象—->JSON数据,使用的方法为:[NSJSONSerialization dataWithJSONObject:jsonString options:0 error:nil] ,注意并非全部的OC对象都可以序列化为JSON数据
44.请简单说明输出流的使用步骤【应用于文件下载时】和注意点?
-
使用步骤:
-
1.建立输出流(指定路径)
-
2.打开输出流(open)
-
3.使用输出流写数据 (write…)
-
4.关闭输出流 (close)
-
注意点:数据写完以后必定要关闭输出流
45.请简单说明文件句柄(NSFileHandle)的使用步骤【应用于文件下载时】和注意点?
46.请简单介绍下NSURLSessionTask的几个子类?
-
NSURLSessionTask是一个抽象类,若是要使用那么只能使用它的子类;
-
NSURLSessionTask有两个子类,一个是NSURLSessionDataTask,该task能够用来处理通常的网络请求,如GET|POST请求等,一个是NSURLSessionDownloadTask,该downloadTask在处理下载请求的时候有很大的优点;
-
NSURLSessionDataTask有一个子类为NSURLSessionUploadTask,该uploadTask在处理上传请求的时候有优点.
47.请简单介绍在iOS开发中XML的几种解析方式?
-
XML文档有两种解析模式,一种是SAX(从根元素开发一个接着一个的解析),一种是DOM(将整个XML文档加载进内存解析)
-
在iOS开发中经常使用的XML的解析方法有两种,一种是使用苹果原生的NSXMLParser来解析(该方法基于SAX),一种是使用谷歌公司提供的第三方框架GDataXML来解析(该方法基于DOM)
-
DOM 一次性加载 GDataXML
-
SAX 一个元素一个元素的解析 NSXMLParser(建立解析器->设置代理->开始解析)
48.如何解决session设置代理以后对代理对象的强引用问题?
-
NSURLSession对象在使用的时候,若是设置了代理,那么session对代理对象会保持一个强引用,在合适的时候应该主动进行释放
-
能够在控制器调用viewDidDisappear方法的时候来进行处理,能够经过调用invalidateAndCancel方法或者是finishTasksAndInvalidate方法来释放对代理对象的强引用
-
invalidateAndCancel方法直接取消请求而后释放代理对象,finishTasksAndInvalidate方法等请求完成以后释放代理对象。
49.在XCode中如何配置以MRC的方式来编译处理某个类?
- 点击项目的Targets,点击Build phases(编译阶段),点击展开Compile Sources,找到要处理的类,配置为-fno-objc-arc便可。
50.在使用NSURLSessionDataTask发送请求下载文件的时候,实现断点下载的技术要点是什么?
-
NSString *header = [NSString stringWithFormat:@"bytes=%zd-",self.currentSize];
-
[request setValue:header forHTTPHeaderField:@"Range"]
51.请简单比较使用NSURLSessionDownloadTask下载文件和使用NSURLSessionDataTask下载文件的优劣?
52.请列出使用NSURLSession发送请求实现文件上传的主要步骤?
-
1.肯定上传请求的路径 (NSURL)
-
2.建立可变的请求对象(NSMutableURLRequest)
-
3.修改请求方法为POST
-
4.设置请求头信息(告知服务器端这是一个文件上传请求)
-
5.按照固定的格式拼接要上传的文件等参数
-
6.根据请求对象建立会话对象(NSURLSession对象)
-
7.根据session对象来建立一个uploadTask上传请求任务
-
8.执行该上传请求任务(调用resume方法)
-
9.获得服务器返回的数据,解析数据(上传成功|上传失败)
53.请列出你认为在进行文件上传时候须要注意的细节(注意点)?
-
1.建立可变的请求对象,由于须要修改请求方法为POST,设置请求头信息
-
2.设置请求头这个步骤可能会被遗漏
-
3.要处理上传参数的时候,必定要按照固定的格式来进行拼接
-
4.须要采用合适的方法来得到上传文件的二进制数据类型(MIMEType)
54.请简单说明可以得到文件二进制数据类型(MIMEType)的几种方法?
55.请简单介绍下AFN各个主要版本的状况?
-
0.1--1.0 "2.0---2.6.3" 3.0-->3.1.0
-
NSURLConnection - (NSURLConnection + NSURLSession) - NSURLSessio
-
-
-
0.1-2.0 NSURLConnection
-
2.0 -3.0 NSURLSession + NSURLConnection
-
3.0 + NSURLSession
56.若是服务器返回的数据不是JSON数据,那么在使用AFN发送网络请求的时候会请求失败请问是什么缘由产生的?如何解决?
-
manager.responseSerializer = [AFXMLParserResponseSerializer serializer]
- 若是既不是JSON也不是XML,则manager.responseSerializer = [AFHTTPResponseSerializer serializer]
57.在使用NSURLSession进行文件上传的时候,如何监听文件上传的进度,有哪些注意点?
- 建立会话对象的时候,须要设置代理,让控制器成为session的代理
- 遵照代理协议(NSURLSessionDataDelegate)
-
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
-
-
-
didSendBodyData:(int64_t)bytesSent
-
-
-
totalBytesSent:(int64_t)totalBytesSent
-
-
-
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
- 注意:当任务执行完毕的时候应该释放对代理对象的强引用
58.请简单说明系统默认提供的NSURLSessionConfiguration三种配置信息?
- “defaultSessionConfiguration”返回标准配置,这实际上与NSURLConnection的网络协议栈是同样的,具备相同的共享NSHTTPCookieStorage,共享NSURLCache和共享NSURLCredentialStorage
- “ephemeralSessionConfiguration”返回一个预设配置,没有持久性存储的缓存,Cookie或证书。这对于实现像”秘密浏览”功能的功能来讲,是很理想的
- “backgroundSessionConfiguration”:独特之处在于,它会建立一个后台会话。后台会话不一样于常规的,普通的会话,它甚至能够在应用程序挂起,退出,崩溃的状况下运行上传和下载任务。初始化时指定的标识符,被用于向任何可能在进程外恢复后台传输的守护进程提供上下文
59.在发送网络请求的时候,若是一个参数(place)须要对应着多个值,那么如下两种请求路径哪一种是正确的?
-
①:[http://192.168.31.520:1314/loveyou?place=Beijing&Shanghai](http://120.25.226.186:32812/weather?place=Beijing&Shanghai)
-
-
-
②:[http://](http://120.25.226.186:32812/weather?place=Beijing&place=Shanghai)[192.168.31.520:1314](http://120.25.226.186:32812/weather?place=Beijing&Shanghai)/loveyou?place=Beijing&place=Shanghai
-
-
-
第二种请求路径是正确的,第一种是错误的,后面的shanghai将会被忽略
60.使用AFN进行文件下载相对于NSURLSessionDownloadTask而言有何好处?
- NSURLSessionDownloadTask在实现文件下载的时候,内部默认把文件下载到了tmp临时路径,等下载完毕以后咱们须要执行一个剪切操做
- AFN下载请求的实现内部基于NSURLSessionDownloadTask,在使用的时候只须要告知AFN应该把文件剪切到什么路径,那么AFN内部会自动的进行文件剪切处理
61.请简单回答网络安全的原则是什么?
-
在网络上”不容许”传输用户隐私数据的”明文”
-
在本地”不容许”保存用户隐私数据的”明文”
62.请简单介绍下Base64编码?
- 将ASCII码转化为8位二进制;
-
-
-
- 将二进制3个归成一组(不足3个在后边补0)共24位,再拆分红4组,每组6位;
-
-
-
- 统一在6位二进制前补两个0凑足8位;
-
-
-
- 将补0后的二进制转为十进制;
-
-
-
- 从Base64编码表获取十进制对应的Base64编码
63.请简单说明单向散列函数的特色?
64.请简单介绍下散列函数的一些应用领域?
65.请简单介绍下对称加密的特色和经典算法?
-
特色:
-
加密和解密使用相同的秘钥
-
加密和解密的过程是可逆的
-
性能好,效率高
-
经典算法
66.请简单说明ECB和CBC两种分组加密模式?
67.请简单介绍下非对称加密的特色和经典算法?
68.请简单介绍下数字签名这门技术?
-
应用场景:须要严格验证发送方身份信息状况
-
数字签名原理
-
客户端处理
-
服务端处理
-
对”消息” HASH 获得 “报文摘要”
-
使用公钥对”数字签名” 解密
-
对结果进行匹配
69.数字证书和公钥什么关系?
70.请简单说明在安装cocoapods时,使用pod install命令安装框架后的大体过程?
-
1.分析依赖:该步骤会分析Podfile,查看不一样类库之间的依赖状况。若是有多个类库依赖于同一个类库,可是依赖于不一样的版本,那么cocoaPods会自动设置一个兼容的版本。
-
2.下载依赖:根据分析依赖的结果,下载指定版本的类库到本地项目中。
-
3.生成Pods项目:建立一个Pods项目专门用来编译和管理第三方框架,CocoaPods会将所需的框架,库等内容添加到项目中,而且进行相应的配置。
-
4.整合Pods项目:将Pods和项目整合到一个工做空间中,而且设置文件连接。
PDF3文件下载 原文:http://bbs.520it.com/forum.php?mod=viewthread&tid=2850 |