1、请简单说明多线程技术的优点和缺点?
优点
- 能够适当提高程序的执行效率;
- 能够适当的提高资源的利用率,比如CPU、内存。
缺点
- 创建线程有额外开销
- 程序的代码更加复杂
- 线程越多,CPU在调度线程上的开销就越大
- 如果开启大量线程,反而会降低程序的性能
2、请简单介绍下什么是原子和非原子属性?
- atomic:原子属性,会为setter方法加锁,默认为atomic。线程安全,会消耗大量资源
- nonatomic:非原子属性,不会为setter方法加锁。非线程安全,适合内存小的移动设备。
3、请简单说明对图片进行二级缓存的实现思路?
在显示图片的时候
- 1.先检查该图片对应的内存缓存
- 1.如果存在内存缓存,则
a.直接使用设置并显示图片;
- 2.如果内存缓存中没有,则
a.继续检查该图片对应的磁盘缓存是否存在,跳转到第2步。
- 1.如果存在内存缓存,则
- 2.检查该图片对应的磁盘缓存
- 1.如果存在磁盘缓存,则
a.先保存一份到内存缓存中(方便下次使用)
b.然后设置并显示图片 - 2.如果不存在磁盘缓存,则直接下载该图片,下载完成后
a.保存一份到内存缓存中
b.保存一份到磁盘缓存中
c.设置并显示图片
- 1.如果存在磁盘缓存,则
4、请简单说明NSCache的特点?
- NSCache是苹果推出专门用来处理内存缓存的类
- NSCache默认是线程安全的,在使用的时候可以不用考虑线程安全的问题
- NSCache使用方法和可变字典类似,当缓存文件超过最大限度的时候会开启一个回收过程,把最老的缓存对象回收
- NSCache可以设置缓存的const(成本)和缓存的数量
5、请问SDWebImage框架的框架结构是怎么样的?
SDWebImage框架有几个主要的组件:
- 管理者(SDWebImageManager)
- 缓存处理组件(SDImageCache)主要对下载的图片进行内存缓存和磁盘缓存处理
- 下载处理组件(SDWebImageDownloader|SDWebImageDownloadOperation)主要处理开子线程异步发送网络请求下载图片相关操作
6、请简单说明GET请求和POST个请求有什么区别,如何选择?
- GET请求的参数直接用&拼接并以?为分隔拼接在请求URL的后面
- POST请求的参数是转换为二进制设置在请求体传递的
- 如果仅仅只是索取数据获得数据,那么建议使用GET请求,其他情况则建议使用POST请求,相对而言POST请求安全性更好一些。
7、请简单列出使用NSURLConnection发送一个异步POST网络请求的步骤?
- 1.确定请求路径(URL)
- 2.创建可变的请求对象(NSMutableURLRequest)
- 3.修改请求方法为POST请求
- 4.把参数拼接起来转换为二进制数据,设置请求体
- 5.使用NSURLConnection发送异步请求([NSURLConnection sendAsync….])
- 6.解析服务器返回的数据,查看请求结果
8、请简单介绍下AFN各个主要版本的情况?
1 | 0.1--1.0 "2.0---2.6.3" 3.0-->3.1.0 |
9、在使用NSURLSession进行文件上传的时候,如何监听文件上传的进度,有哪些注意点?
- 创建会话对象的时候,需要设置代理,让控制器成为session的代理
- 遵守代理协议(NSURLSessionDataDelegate)
- 实现代理方法,在代理方法中计算文件的上传进度
1
2
3
4
5- (void)URLSession:(NSURLSession *)session
task:(NSURLSessionTask *)task
didSendBodyData:(int64_t)bytesSent
totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
注意:当任务执行完毕的时候应该释放对代理对象的强引用
10、在发送网络请求的时候,如果一个参数(place)需要对应着多个值,那么以下两种请求路径哪种是正确的?
1 | ①:[http://192.168.31.520:1314/loveyou?place=Beijing&Shanghai](http://120.25.226.186:32812/weather?place=Beijing&Shanghai) |
第二种请求路径是正确的,第一种是错误的,后面的shanghai将会被忽略