面试题 -- 基础知识

1. 深拷贝 和 浅拷贝的区别

浅拷贝是指针拷贝,对一个对象进行浅拷贝,相当于对指向对象的指针进行复制,产生一个新的指向这个对象的指针,对象销毁后两个指针都应该置空;
深拷贝是对一个对象进行拷贝,相当于对对象进行复制,参数一个新的对象,当一个对象改变或销毁后拷贝的新的对象不受影响。

2. 懒加载模式

懒加载又叫延迟加载,只有在需要的时候才进行加载,可用来加载控件、属性。
懒加载模式的实质就是一个特殊的getter方法,特殊在在getter方法的内部包含一段用于初始化创建对象的代码逻辑,但该逻辑只执行一次
优点:

  1. 因为懒加载代码逻辑只执行一次,而且是在需要的时候才会执行,不需要的时候就不执行,就提高了代码的效率,节约了系统所占用内存的资源;
  2. 使用懒加载模式可以将控件的初始化都放在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. 什么是序列化?

  1. 把对象转换为字节序列的过程称为对象的序列化
  2. 把字节序列恢复为对象的过程称为对象的反序列化

条件
可以用来将对象写到文件或者数据库里,并且可以读取出来 ;
遵循NSCoding协议,来实现复杂对象的存储
实现该协议后就可以对其进行打包或者解包,然后转化为NSData

序列化常用途径

  1. 归档 plist文件(Foundation自带对象类型,用户自定义对象类型)
  2. CoreData
  3. sqlite
  4. NSUserDefault

6. 什么是安全释放

对象释放的时候, 指针指向nil

[p release]
p = nil;

7. 响应者链

** 事件传递**:

  1. 当iOS程序中发生触摸事件后,系统会将事件加入到UIApplication管理的一个任务队列中;
  2. UIApplication将处于任务队列最前端的事件向下分发,即UIWindow
  3. UIWindow将事件向下分发,即UIView
  4. UIview首先看自己是否能处理事件,触摸点是否在自己身上。如果能,那么继续寻找子视图。
  5. 遍历子控件,重复以上两步。
  6. 如果没有找到,那么自己就是事件处理者
  7. 如果自己不能处理,那么不做任何处理
    事件传递 首先会判断该响应者是否可以响应事件,然后通过以下两个方法判断是否是合适的View
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

 
响应者链

  • 继承UIResponder的都可以看成一个响应者被添加进入响应者链
  • 从通过事件传递找到的最合适的 View 开始,向上级视图延伸,形成一条链

事件的传递是从上到下(父控件到子控件),事件的响应是从下到上(顺着响应者链条向上传递:子控件到父控件)
 

8. 简述沙盒机制

  1. 每一个 应用程序都有一个属于自己的沙盒目录
  2. 只能访问自己的沙盒目录
  3. 不能访问其它应用程序的目录

猜你喜欢

转载自blog.csdn.net/guoxulieying/article/details/132021126