1.简述视图控制器的生命周期
在初始化的时候开始,到被移除之后生命周期结束
initWith…—>loadView—>viewDidLoad—>viewWillAppear—>viewDidAppear—>viewWillDisappear—>viewDidDisappear
初始化方法—>加载视图—>视图已经加载—>视图将要显示—>视图已经显示 —>视图将要消失 —>视图已经消失
2.代理作为属性的时候使用什么语义?为什么?
在ARC中用weak,在MRC中用assign, 防止循环引用,防止给被内存销毁的代理对象发送消息.
3.oc中有没有多继承?如果有,请简述,如果没有,那什么来完成类的扩展?
没有 类目,延展,协议
4.#import,#include,@class各有什么作用
都可以引用头文件
#import 在重复引用的时候不会出错 ==#inlude + #progrma once
#include 存在c中,oc中也可以用
@class 可以有效的避免头文件的循环引用
5.简述oc的内存管理机制
(1)oc中在Xcode5编译的App以后(Max OS10.5),取消了GC(Garbage Collection垃圾回收机制),全面使用引用计数机制来管理内存。
(2)在iOS开发当中,有MRC和ARC两种方式来管理内存,ARC是自动应用计数机制,仅仅是在MRC(手动引用计数)的基础上不全了内存管理的代码,并非GC。在MRC中,每当我们使用alloc、retain、copy、mutableCopy使对象的引用计数增加的时候,都要使用对应的release或者autoRelease来使对象的引用计数减少,增加和减少的次数要相等。在对象引用计数减为0的时候,会被发送dealloc消息,被内存销毁。
(3)此外,开发中使用的其他框架的一些内容(比如CoreFoundation中的数据类型)要使用对应框架下的内存管理来操作数据。
6.oo语言的三大特性是什么?oo语言的核心是什么?
oo语言的三大特性:封装,继承和多态 oo语言的核心是类和对象
封装:把类的实现的细节放在类的内部,只把接口部分让外界看,实现放在类的内部
继承子类从父类那拿到公有的方法和属性
多态:父类指针可以指向子类对象,不同对象在相应相同消息的时候会有不同表现
7.懒加载是什么?有什么意义?
重写一个属性的getter方法
意义:1.保证内存不冗余开辟,需要的时候才开辟空间
2.保证创建对象的代码不会反复执行
8.oc中集合类都有哪些?各有什么特点?
数组,字典,集合
1.都只能存储对象类型(字典的key值必须遵循NSCopying协议)
2.字典和集合是无序的,数组是有序的
3.字典是以key-value键值映射的关系存储数据的,集合元素唯一(在内存中是散列存储的)存取高效
9.什么是深拷贝?什么是浅拷贝?
浅拷贝是一根指针指向了原有对象(只复制指向对象的指针,而不复制引用对象本身)。
深拷贝是开辟了一块新的内存空间(OC里面没有真正意义上的深拷贝,除了归档和反归档)
10.内存被人为划分为几个区域?各有什么特点
栈区,堆区,静态区,常量区,代码区
int a = 10; 10不在任何区(10是即时数)
11. 请简述响应者链?
AppDelegate—>UIApplication—>UIwindow—>根视图控制器(也就是自己创建的RootViewController添加到自己window上的那个视图)—>根视图控制器上的子视图
12.请简述target和action的解耦?
13.instancetype和id 的区别?
1.instancetype
在类型表示上,跟
id
一样,可以表示任何对象类型;
2.instancetype
只能用在返回值类型上,不能像
id
一样用在参数类型上;
3. instancetype
比
id
多一个好处:编译器会检测
instancetype
的真实类型;