iOS面试题(附答案) 1、简述一下UIViewController的生命周期? alloc -‐ init -‐ loadView -‐viewDidLoad -‐ viewWillAppear -‐viewDidAppear -‐viewWillDisappear -‐viewDidDisappear -‐viewUnLoad -‐dealloc 2、#import和#include的区别? #import导入的头文件不会多次重复导入 3、写一个计算A、B中较大值的标准宏MAX? #define MAX(A,B) ( (A)(B) ? (A) : (B) ) 4、谈一下iOS中的多线程? 多线程是指从软件或硬件上实现多个线程并发执行的技术 iOS中可以使用NSThread、NSOperation、GCD实现多线程 5、谈一下Objective-‐C的内存管理方式? ARC、手动管理、线程池 6、简述assign、retain、copy、weak和strong分别在什么情况下使用? 答案见《iOS面试知识点整理.pdf》 7、类别的作用?说一下类别和类扩展的区别? 类别的作用是给类增加方法 类扩展可以给类增加属性或私有变量,只可以对自定义的类使用类扩展 8、说说你对KVC和KVO的理解? KVC:键值编码,提供一种机制来间接访问对象的属性 KVO:键值观察,基于KVC实现的对类属性的观察监听 9、深复制和浅复制的区别? 答案见《iOS面试知识点整理.pdf》 10、谈一下你对block的理解,请写一个block类型的属性? block本质是匿名函数 声明一个block: 方法一:void (^block)( NSString *string); 方法二:typedef void(^MyBlock)(NSString *string); @property (nonatomic, strong)MyBlock block; 11、frame和bounds的区别? 答案见《iOS面试知识点整理.pdf》 12、谈一下UITableViewCell的重用机制? 13、简述一下消息推送的流程? 1、在苹果推送服务器APNs上注册deviceToken,并发送给自己的后台服务器; 2、后台服务器将deviceToken和要发送的消息打包发送给APNs(注意:这一步还需要推送证书的路径和密码) 3、APNs将消息发送给deviceToken中保存的指定设备中的指定App 14、简述一下App发布到AppStore的流程? 1、首先生成发布描述文件(通过创建生产证书 -‐ 创建AppId (Bundle Id)-‐ 创建发布的描述文件) 2、然后在iTunesContent中创建一个应用并填好信息 3、在XCode中将项目打包并上传(注意:Bundle Id全程一致, 在build Setting中填好刚创建的描述文件) 4、最后再回到iTunesContent中选择刚才上传的项目,然后点击提交。 15、谈一下面向对象的几个主要特征? 封装、继承、多态 16、谈一下你常用的一些设计模式及应用场景? MVC :整个项目,用于降低代码耦合度 代理 :常用于反向传值 单例 :常用于整个项目需要且只需要创建一次的类 17、谈一下关键字static的作用?关键字const呢? 答案见《iOS面试知识点整理.pdf》 18、堆和栈的区别是什么? 答案见《iOS面试知识点整理.pdf》 19、break、continue、return的区别是什么? 答案见《iOS面试知识点整理.pdf》 20、int*p中*p和p的分别代表什么 ? 答案见《iOS面试知识点整理.pdf》 21、讲一下OC和C有哪些区别? OC是面向对象的C,OC是面向对象的语言,C是面向过程的。 OC完全兼容C语言。 22、谈谈你对代理设计模式的理解? 23、谈谈Http协议?其中GET和POST有哪些区别? Http协议是超文本传输协议,是基于TCP/IP协议基础之上的应用层协议;HTTP是短连接,并且是无状态的协议。 GET和POST的区别: 1、GET比POST安全,GET传输参数是在url中,而POST是在body体中,但是在app中这种安全性体现不明显。 2、GET比POST快。 3、GET传输数据大小不超过1k,POST可以上传图片、文件等大的数据。 24、谈谈你对MVC开发模式的理解及你是如何在iOS项目中采用MVC模式开发的? M:Model,V:View,C:Controller,使用MVC模式主要是用来降低代码耦合度; 在iOS项目中将模块按MVC模式划分,可以将网络请求得到的数据封装在Model中,将所有呈现的视图独立出来,然后用视图控制器ViewController来管理各个View和Model之间的数据和信息传递。 25、谈谈你对Socket的理解?TCP和UDP协议有什么区别 Socket简单来说是一种通信机制,是面向C/S(客户端/服务端)模型而设计的。针对客户端和服务端提供不同的socket对象,客户端有客户端的socket对象,服务端有服务端的socket对象,两个socket之间就可以进行通信了。 TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,正式收发数据前必须和对方建立可靠的连接(“三次握手”),传输速度相对UDP较慢。 UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境,但是传输速度快 26、你常用的数据存储方式有哪些? 答案见《iOS面试知识点整理.pdf》 27、通知中心和代理都可以用来发送消息和数据,两者有什么区别? 通知:多对多 代理:一对一 28、类别和继承有哪些区别? 答案见《iOS面试知识点整理.pdf》 29、你在项目当中是如何进行网络数据请求的? 使用AFNetworking 30、你有做过iPhone6的屏幕适配吗? 在项目中你是如何进行适配的? 做过, 我在项目中对使用了XIB的UI控件就用autoLayout来适配,主要用法是对各个UI控件相对其父视图加约束 和根据同级视图加约束。在没有用XIB的UI控件(手写的UI控件)使用Masonry框架来适配.