iOS面试题

简述沙盒机制是什么

  • 1.每一个应用程序都有一个属于自己的沙盒目录
  • 2.只能访问自己的沙盒目录
  • 3.不能访问其他应用程序的目录

获取沙盒目录路径

NSString* sandBoxPath = NSHomeDirectory();
NSLog(@"sanBoxPath = %@", sandBoxPath);

//sanBoxPath = /Users/vijay/Library/Developer/CoreSimulator/Devices/8FE0176D-D626-4C92-A534-0FC41627A416/data/Containers/Data/Application/2803A31F-A9B3-4191-A740-EFB4FD374DBF

1.png

沙盒目录(4个):

Documents 存储配置信息 开机动画 背景音乐 plist文件 图片

Library 存储用户缓存、下载数据等(如果存放在Documents中,苹果不让上架审核通过)

tmp 存储临时数据 (APP退出时,会清空tmp数据, Documents/Library目录数据则会本地化存储持久化,不会清空)

SystemData 存储系统数据

strong copy关键字的区别

strong/retain copy 实际上是浅复制和深复制的区别(strong ARC下面的关键字 retain是MRC)

strong 强引用一个对象,需要持有它所指向对象的所有权

strong/retain 属于浅复制,引用一次,增加一次引用计数retainCount 可变的NSMutableString NSMutableArray NSMutableDictionary 一般用strong修饰(人的影子)

copy 属于深复制:不可变的NSString NSArray NSDictionary的父类引用(指针)指向子类对象,一般用copy关键字修饰(克隆人)

3.png

解决tableView的卡顿问题

问题:TableView卡顿一般是由于加载大量的网络图片资源时,引起的。每加载一行,都需要去从网络上读取这张图片,每一个cell的出现都需要网络上请求的这么一个状态,所以会出现卡顿的问题。

解决方法:网络图片的加载,做成异步请求即可。第三方网络图片异步加载库SDWebImage

问题:tableView加载的数据很大,每一行cell的高度不统一,高度需要通过临时加载的数据来计算
解决方法:优先计算出请求所有行的高度,做成一个数组,Cell表格加载行高时,通过数组来绘制每一行的行高。
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 1.0f;
} //加载数据表格每一行数据之前,优先调用的

利用Socket建立网络连接的步骤

Socket是网络通讯的基石

Socket的两种协议

TCP 一对一,类似打电话

UDP 一对多,类似发短信

Http是建立在Socket TCP络通讯协议

每一对套接字分为服务端和客户端

  1. 服务器监听 循环监听 等待状态,无需指定

  2. 客户端请求,指定连接的服务器(IP sort端口)

  3. 连接确认(服务端确认 客户端确认 服务端再次确认 三次握手)

服务器开启一个新的线程,接收客户端的请求,处理并返回服务端的数据

建立网络连接 三次握手

断开网络连接 四次挥手

你可能感兴趣的:(iOS面试题)