iOS 面试中的高频题目

1、MVC

a: MVC 是软件设计模式的一种,架构级的设计模式
b: M(model) V(view) C(controller)
model 模型:主要负责存储和操作数据
view 视图:主要负责展示数据和用户交互
controller:主要负责将 model 和 view 联系起来:从网络获取数据-》赋值给数据模型-》将 model 的数据传递给 veiw 展示(响应)view 的 delegate 和 datasource 方法)-》刷新 veiw
好处:
实现了 view 和model 的低耦合(理论上 model 和 view 没有任何联系),进行代码的维护、修改和扩展、莫用非常方便、提高了软件的开发效率,节约了开发成本 。

2、多态。

主要是将数据类型的确定由编译时,推迟到了运行时。
这个问题其实浅涉及到两个概念,运行时和多态。
简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。 多态:不同对象以自己的方式响应相同的消息的能力叫做多态。
意思就是假设生物类(life)都用有一个相同的方法-eat; 那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法。
也就是不同的对象以自己的方式响应了相同的消息(响应了eat这个选择器)。
因此也可以说,运行时机制是多态的基础。

3、简述内存管理基本原则

如果使用alloc,copy(mutableCopy)或者 retain 一个对象时,你就有义务,向它发送一条 release 或者 autorelease 消息。其他方法创建的对象,不需要由你来管理内存。

4、为什么 delegate(代理)属性都是 assign 而不是 retain 的?

防止循环引用,以致对象无法得到正确地释放。

5、简述常见的设计模式

单例设计、代理设计、观察者(通知)、工厂方法、模板方法

6、OC 语言的优缺点

(1)优点:类目、动态识别、支持 C语言、OC 与 C++可以混编
(2)缺点:不支持命名空间、不支持运算符重载、不支持多重继承

7、代理 delegate 与通知 Notification 、block的使用区别

delegate 与 block 一般是用于两个对象1对1之间的通信交互,delegate 需要定义协议方法,代理对象实现协议方法,并且需要建立代理关系才可以实现通信。block 更加简洁,不需要定义繁琐的协议方法,但是如果通信事件比较多的话,建议使用 delegate。Notification 主要用于1对多情况下通信,而且,通信对象之间不需要建立关系!但是使用通知,代码可读性差

8、你是如何理解 delegate

delegate,又称为委托或代理,他是一种设计模式。delegate 主要用于连个对象之间的通信交互,并且杰出两个通信对象的耦合性,iOS 中大量是哦用了 delegate 设计,主要用于视图与使用对象之间的通信交互。

9、控制器 ViewController 的loadView,veiwDidLoad,veiwDidUnload 分别 是在什么时候调用的?

(1)loadView 调用:当控制器的跟视图 view 为空,且此 view 被访问时则调用
(2)loadView 调用之后调用 viewDidLoad
(3)iOS6.0之前,当内存警告时,先卸载视图,再调用 viewDidUnload 来释放内存

10、什么是动态绑定(多态)?

动态绑定是面向对象特征性之一多态的体现,声明的一个变量,在运行的时候可以绑定不同的对象,比如在方法的参数中声明这样一个变量 UIView *view ,运行的时候,我们可以根据不同的应用场景给 view 变量传入不同的对象,可以传递一个 UIButton 对象,也可以传入 UIImageView 对象。

11、block 与函数有何异同,block 有何优点

(1)block 类似于 c 里面的函数指针都可以作为参数进行传递,用于回调,但是 block的实现可以定义在方法中,函数则不可以。
(2)block的语法简洁,可以在方法中定义实现,这样可以访问方法中的局部变量,使代码更加的紧凑,结构化
12、cocoa touch 框架
UIKit、Foundation、CoreGraphic、CoreAnimation
(1)音频和视频
CoreAudio
OpenAL
Media Library
AV Foundation
(2)数据管理
Core Data
SQLite
(3)图形和动画
Core Animation
OpenGL ES
Quartz 2D
Core Graphic
(4)用户应用
Address Book
Core Location
Map Kit
Store Kit

12栈结构与队列的区别?

栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。
队列(Queue)是限定只能在表的一端进行插入和在另一端进行操作的线性表。
1、队列先进先出,栈先进后出。
2、对插入和删除操作的限定。栈是限定只能在表的一端进行插入和删除操作的线性表。队列是限定只能在表的一端进行插入和在另一端进行操作的线性表。
3、遍历数据速度不同。队列遍历数据的速度要快的多

13 OC 中有无多重继承,如何实现多重继承

(1)没有多继承。
(2)cocoa 中所有的类都是 NSObject 的子类,多继承在这里是用 project 委托代理来实现的。
(3)面向对象语言大部分都是单继承,如:java、c#
(4)c++是支持多继承的

你可能感兴趣的:(iOS)