iOS常见面试题

1、浅复制和深复制的区别

浅层复制:只复制指向对象的指针,而不复制引用对象本身。

深层复制:复制引用对象本身。

意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了两份独立对象本身。

2、KVO and KVC

kvc: 键 - 值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。很多情况下可以简化程序代码。

kvo: 键值观察机制,他提供了观察某一属性变化

3、frame和bounds有什么不同

frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)

bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)

4、进程与线程

进程:进程就是一个正在运行的程序(一堆CPU指令的集合),进程里至少应该包含一个线程。

线程:一条不分叉的CPU指令的集合,就是一个线程。

多线程:在一个进程里面,有多条不分叉的CPU指令的集合,就是多线程。

一个真正的CPU(指物理的CPU),一个物理的CPU可以虚拟成多核的CPU。每一个虚拟出来的CPU核同时的某一时刻,只能执行一个CPU指令。那么,假设CPU虚拟成了两个核,其中一个核分给了“主线程”,另一个核需要去处理3个“分线程”,分别是以下3个线程:

线程1:该条不分叉的CPU指令集包括 20句指令

线程2:该条不分叉的CPU指令集包括 15句指令

线程3:该条不分叉的CPU指令集包括 30句指令。

由于上边提到,虚拟处的CPU核在同一时刻,只能执行一个CPU指令。

上下文切换(即,多一个CPU处理多线程时,会将处理过的线程的指令的信息保存在寄存器里面,然后将时间片分配给其他线程,当时间片再轮转过来的时候会将寄存器状态恢复,接着执行没有执行完的指令)

多线程的优点:

为了提高用户体验

但是多线程也有它的缺点:

1、比较耗费系统资源

2、造成资源竞争

3、会出现 死锁

5、retain/copy/assign/release/autorelease/dealloc/strong/weak关键字

retain:使对象的引用计数+1

copy:复制内容

assign:

release:使对象的引用计数-1

autorelease:

dealloc:

strong:

weak:

6、self.name = xxx 与 _name= xxx 的区别


7、类变量的@protected ,@private,@public,@package声明各有什么含义?


8、生命周期

你可能感兴趣的:(iOS常见面试题)