面试专栏

精选面试知识,经验与见解

IOS开发高级程序员面试常见问答

1、delegate和notification有什么区别,什么情况下使用?

答:delegate:消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然后发送者响应事件,delegate机制使得接收者可以改变发送者的行为。通常发送者和接收者的关系是直接的一对多的关系。

notification:消息的发送者告知接收者事件已经发生或者将要发生,仅此而已,接收者并不能反过来影响发送者的行为。通常发送者和接收者的关系是间接的多对多关系。

2、Object-C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?

答:线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue。

在主线程执行代码,方法是performSelectorOnMainThread。

如果想延时执行代码可以用:performSelector:onThread:withObject:waitUntilDone。

3、iOS有哪些数据持久化方式?

答:四种:属性列表、对象归档、SQLite3和Core Data。

4、Objective-C如何对内存管理的,说说你的看法和解决方法?

答:Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。解决方法的话:谁持有,谁释放。

5、如何对iOS设备进行性能测试?

答:Profile-> Instruments ->Time Profiler。

6、什么是MVC,为什么使用MVC,有什么好处?描述一下iOS SDK中如何实现MVC的开发模式。

答:MVC分别为:模型(Model),视图(View)和控制Controller)。

模型(Model):即“数据模型”,用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。

视图(View):视图层能够实现数据有目的显示。

控制器(Controller):控制器起到不同层面间的组织作用,用于控制应用程序的流程。

对于iOS SDK,所有的View都是视图层的,它应该独立于模型层,由视图控制层来控制。所有的用户数据都是模型层,它应该独立于视图。所有的ViewController都是控制层,由它负责控制视图,访问模型数据。

7、请阐述UIViewController的生命周期,包括代码的执行顺序。

答:当一个视图控制器被创建,并在屏幕上显示的时候。代码的执行顺序:

(1)视图显示在屏幕上的顺序

a、alloc--创建对象,分配空间。

b、init (initWithNibName)--初始化对象,初始化数据。

c、viewload--从nib载入视图, 这一步不需要去干涉。除非没有使用xib文件创建视图。

d、viewDidLoad--加载完毕,可以进行自定义数据以及动态创建其他控件。

f、viewWillAppear--视图将出现在屏幕之前,马上这个视图即将显示在屏幕上。

g、viewDidAppear--视图已在屏幕上渲染完成。

(3)视图将被从屏幕上移除的顺序

a、viewWillDisappear--视图将被从屏幕上移除之前执行。

b、viewDidDisappear--视图已经被从屏幕上移除。

c、dealloc--视图被销毁,此时需要在init和viewDidLoad中创建的对象进行释放。

d、viewDidUnload--出现内存警告在内存不足时执行,并对所有非当前显示的controller执行。

本视图的所有子视图将被销毁,以释放内存,此时开发者需要手动对viewLoad、viewDidLoad中创建的对象释放内存。

因为当这个视图再次显示在屏幕上的时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。

2年前
3668
948
0
热门岗位
  • 热门岗位 热门
    软件测试工程师
    优惠价 ¥ 8
  • 热门岗位 热门
    产品经理
    优惠价 ¥ 8
  • 热门岗位 热门
    初级理财顾问
    优惠价 ¥ 8
  • 热门岗位 热门
    金融客户经理
    优惠价 ¥ 8
  • 热门岗位 热门
    有机合成助理研究员
    优惠价 ¥ 8
  • 热门岗位 热门
    药剂师
    优惠价 ¥ 8