文章目录
1. 深拷贝 和 浅拷贝的区别
浅拷贝是指针拷贝,对一个对象进行浅拷贝,相当于对指向对象的指针进行复制,产生一个新的指向这个对象的指针,对象销毁后两个指针都应该置空;
深拷贝是对一个对象进行拷贝,相当于对对象进行复制,参数一个新的对象,当一个对象改变或销毁后拷贝的新的对象不受影响。
2. 懒加载模式
懒加载又叫延迟加载,只有在需要的时候才进行加载,可用来加载控件、属性。
懒加载模式的实质就是一个特殊的getter方法,特殊在在getter方法的内部包含一段用于初始化创建对象的代码逻辑,但该逻辑只执行一次
优点:
- 因为懒加载代码逻辑只执行一次,而且是在需要的时候才会执行,不需要的时候就不执行,就提高了代码的效率,节约了系统所占用内存的资源;
- 使用懒加载模式可以将控件的初始化都放在getter方法中,这样可以降低viewDidLoad方法的复杂度,使得代码更加简洁,降低的代码的耦合度
3. frame和bounds有什么不同?
frame指的是:该View在父View坐标系中的位置和大小。(参照点是父View的坐标系)
bounds指的是:该View在本身坐标系系统中的位置和大小。(参照点是本身坐标系统)
4. What is push notification?
推送通知是一种技术,有本地推送和网络推送。
一般的推送通知是服务端push 消息给app端。
推送实现
1.由App向iOS设备发送一个注册通知,用户需要同意系统发送推送。
2.iOS应用向APNS远程推送服务器发送App的Bundle Id和设备的UDID。
3.APNS根据设备的UDID和App的Bundle Id生成deviceToken再发回给App。
4.App再将deviceToken发送给远程推送服务器(自己的服务器), 由服务器保存在数据库中。
5.当自己的服务器想发送推送时, 在远程推送服务器中输入要发送的消息并选择发给哪些用户的deviceToken,由远程推送服务器发送给APNS。
6.APNS根据deviceToken发送给对应的用户。
5. 什么是序列化?
- 把对象转换为字节序列的过程称为对象的序列化
- 把字节序列恢复为对象的过程称为对象的反序列化
条件:
可以用来将对象写到文件或者数据库里,并且可以读取出来 ;
遵循NSCoding协议,来实现复杂对象的存储
实现该协议后就可以对其进行打包或者解包,然后转化为NSData
序列化常用途径:
- 归档 plist文件(Foundation自带对象类型,用户自定义对象类型)
- CoreData
- sqlite
- NSUserDefault
6. 什么是安全释放
对象释放的时候, 指针指向nil
[p release]
p = nil;
7. 响应者链
** 事件传递**:
- 当iOS程序中发生触摸事件后,系统会将事件加入到UIApplication管理的一个任务队列中;
- UIApplication将处于任务队列最前端的事件向下分发,即UIWindow
- UIWindow将事件向下分发,即UIView
- UIview首先看自己是否能处理事件,触摸点是否在自己身上。如果能,那么继续寻找子视图。
- 遍历子控件,重复以上两步。
- 如果没有找到,那么自己就是事件处理者
- 如果自己不能处理,那么不做任何处理
事件传递 首先会判断该响应者是否可以响应事件,然后通过以下两个方法判断是否是合适的View
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
响应者链
- 继承UIResponder的都可以看成一个响应者被添加进入响应者链
- 从通过事件传递找到的最合适的 View 开始,向上级视图延伸,形成一条链
事件的传递是从上到下(父控件到子控件),事件的响应是从下到上(顺着响应者链条向上传递:子控件到父控件)
8. 简述沙盒机制
- 每一个 应用程序都有一个属于自己的沙盒目录
- 只能访问自己的沙盒目录
- 不能访问其它应用程序的目录