厦门IOS培训
达内厦门iOS培训中心

0592-5903858

热门课程

iOS常见面试题精选

  • 时间:2018-03-28
  • 发布:厦门达内
  • 来源:企业面试题

iOS 移动开发工程师面试难免会有技术面试,只有通过技术面试,并且表现良好才有可能拿到offer。接下来笔者就精选了几个在iOS面试中常见的面试题。

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

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

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

有些面试官在这里面可能还继续追问引出堆栈以及他们的地址分配情况的面试题。

2、什么是KVO和KVC?

KVC:键 – 值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。

KVO:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码

KVO 是如何实现通知对象的呢,其实这是通过Objective-C强大的runtime运行时机制实现的。当你第一次观察某个对象时,runtime会创建一个新的继承被监听类的子类。该派生类一般名称为 NSKVO....、通过打断点的方式可以查看到。在这个新的类中,它会重写所有被观察的key,然后将对象的isa指针指向新创建的类。所以对象神奇的变成了新的子类的实例。这些被重写的方法中添加了调用通知观察者的方法的代码。当一个对象的一个属性改变时,会触发setKey方法,但这个方法被重写了,并且在内部添加了发送通知机制。

3、对于单例的理解

单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类

如果说下单例模式的优缺点等等会大大加分。

4、通知、代理和 block 的区别

  • KVO就是cocoa框架实现的观察者模式,一般同KVC搭配使用,通过KVO可以监测一个值的变化,比如View的高度变化。是一对多的关系,一个值的变化会通知所有的观察者。

  • NSNotification是通知,也是一对多的使用场景。在某些情况下,KVO和NSNotification是一样的,都是状态变化之后告知对方。NSNotification的特点,就是需要被观察者先主动发出通知,然后观察者注册监听后再来进行响应,比KVO多了发送通知的一步,但是其优点是监听不局限于属性的变化,还可以对多种多样的状态变化进行监听,监听范围广,使用也更灵活。

  • delegate 是代理,就是我不想做的事情交给别人做。比如狗需要吃饭,就通过delegate通知主人,主人就会给他做饭、盛饭、倒水,这些操作,这些狗都不需要关心,只需要调用delegate(代理人)就可以了,由其他类完成所需要的操作。所以delegate是一对一关系。

  • block是delegate的另一种形式,是函数式编程的一种形式。使用场景跟delegate一样,相比delegate更灵活,而且代理的实现更直观。

  • KVO一般的使用场景是数据,需求是数据变化,比如股票价格变化,我们一般使用KVO(观察者模式)。delegate一般的使用场景是行为,需求是需要别人帮我做一件事情,比如买卖股票,我们一般使用delegate。

    Notification一般是进行全局通知,比如利好消息一出,通知大家去买入。delegate是强关联,就是委托和代理双方互相知道,你委托别人买股票你就需要知道经纪人,经纪人也不要知道自己的顾客。Notification是弱关联,利好消息发出,你不需要知道是谁发的也可以做出相应的反应,同理发消息的人也不需要知道接收的人也可以正常发出消息。

5、NSoperation和GCD的比较

GCD是基于c的底层api,NSOperation属于object-c类。iOS 首先引入的是NSOperation,IOS4之后引入了GCD和NSOperationQueue并且其内部是用GCD实现的。

相对于GCD:

  • NSOperation拥有更多的函数可用,具体查看api。

  • 在NSOperationQueue中,可以建立各个NSOperation之间的依赖关系。

  • 有kvo,可以监测operation是否正在执行(isExecuted)、是否结束(isFinished),是否取消(isCanceld)。

  • NSOperationQueue可以方便的管理并发、NSOperation之间的优先级。

  • GCD主要与block结合使用。代码简洁高效。

  • GCD也可以实现复杂的多线程应用,主要是建立个个线程时间的依赖关系这类的情况,但是需要自己实现相比NSOperation要复杂。

  • GCD仅支持FIFO队列,而NSOperationQueue支持调整队列执行顺序。

以上的面试题在iOS面试碰见的概率还是很大的,如果要进行iOS面试的小伙伴可能要多注意这方面的知识储备。

上一篇:面试参考!iOS技术面试常见题(二)
下一篇:没有下一篇了
选择城市和中心
贵州省

广西省

海南省