1、深拷贝浅拷贝:
浅拷贝就是拷贝对象的指针,而不复制引用对象本身;深拷贝就是拷贝引用对象本身;
浅复制好比你和你的影子,你完蛋,你的影子也完蛋
深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。
2、继承和类别category 的区别
类别可以在获悉、不改变原来代码的情况下,往里边添加新的方法,只能添加不能修改和删除。并且如果类别的方法和原来类中的方法重名起冲突,那么类别的方法将覆盖原来的方法,因为类别的优先级更高一些;
继承可以添加删除方法,并且可以增加属性
3、KVO 和 KVC
kvc 是键值编码,是一种间接访问对象属性使用字符串来标识属性,而不是通过调用存取方法,直接或者通过实例变量访问的机制。
kvo 键值观察机制,提供了观察某一属性变化的方法,极大的简化了代码
4、代理的作用
改变或者传递控制链,允许一个类在某些特定的环境下通知其他类,而不需要获得其他类的指针,可以减少框架的复杂度。
5、我们说的OC动态运行时语言是什么?
主要是将数据类型确定的时间推迟到了运行的时间;
这个问题涉及到了运行时和多态:简单来说运行时机制使我们在运行的时候才确定数据的类型,以及调用该类别对象指向的方法; 多态就是不同对象以自己的方式响应相同消息的 能力
6、通知和协议
通知可以一对多,一条消息多人接收,它只管发出消息而不关心多少接收到感兴趣处理;
协议有 has-a 的关系,明星的代理人,发出一条消息A明天开发布会,明天不可能让B去参加发布会,单一和可控制的关系。
7、什么是消息推送?
可以理解为客户端获取消息的一种手段,普通情况下都是客户端主动去pull,推送则是服务器端主动的push。
8、多态
面向对象的三大特点:封装、继承、多态。
多态的定义:引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)
多态存在的三个必要条件: 1)继承、2)重写、3)父类引用指向子类对象
实现多态的技术:动态绑定,在运行过程中判断所引用对象的实际类型,根据其实际的类型调用相应的方法
多态的作用:消除类型之间的耦合关系
9、单例
三条准则: 1)单例必须是唯一的(要不怎么叫单例?) 在程序生命周期中只能存在一个这样的实例。单例的存在使我们可以全局访问状态; 2)为保证单例的唯一性,单例类的初始化方法必须是私有的。这样就可以避免其他对象通过单例类创建额外的实例。 3)考虑到规则1,为保证在整个程序的生命周期中值有一个实例被创建,单例必须是线程安全的。
10、What is lazy loading?
答案:懒汉模式,只在用到的时候才去初始化。
也可以理解成延时加载。
我觉得最好也最简单的一个列子就是tableView中图片的加载显示了。
一个延时载,避免内存过高;一个异步加载,避免线程堵塞。
UIViewController周期方法(就是开始到最后都走什么方法)
11、当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序
1)、 alloc 创建对象,分配空间
2)、init (initWithNibName) 初始化对象,初始化数据
3)、loadView 从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图
4)、viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件
5)、viewWillAppear 视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6)、viewDidAppear 视图已在屏幕上渲染完成
当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反
1)、viewWillDisappear 视图将被从屏幕上移除之前执行
2)、viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
3)、dealloc 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放
12、"UIView和CALayer 的区别和联系"
答案:博客答案,