iOS开发工程师常见面试题及答案

1.申请后台运行除了后台刷新和VoIP及音乐播放和定位之外还有什么办法?

   答案:UIBackgroundTaskIdentifier


2.使用GCD在当前代码中加入几个NSLog打印,请写出打印出的顺序

   答案:用XCode跑一下便知,一会补充上答案


3.autoreleasepool工作机制

   答案:通过autoreleasepoolPage来决定是否对所有使用了autorelease的变量执行一次releasehttp://www.tuicool.com/articles/3aqmqy


4.通过dsym分析崩溃日志

   答案:可以分析出代码出现问题的代码,在周围寻找可疑处即https://developer.apple.com/library/ios/technotes/tn2151/_index.html


5.iOS8的适配

   答案:1)有一些被废弃的API,包括UIApplication中用来注册推送的API使用新的API来代替了;UIViewController中用来获取当前屏幕方向的API和属性被size classes和traits替代;UISearchDisplayController被UISearchController替代。

              2)CLLocationManager的方法改变,在请求地理信息之前必须要询问用户是否准许;

              3)UITableViewCell层级改变,从三层变回两层;

              4)UIActionSheet和UIAlertView升级,加入block属性;


6.简单介绍NSRunLoop

    答案:是一个事件处理循环,处理当系统收到一个输入源传入的时间时便会运行,否则则不会运行,并且负责调配线程。输入源包括屏幕点击事件,读写时间,timer事件等。

http://www.cnblogs.com/zhidao-chen/archive/2013/03/21/2973329.html

http://stackoverflow.com/questions/12091212/understanding-nsrunloop


7.屏幕点击时间的传递顺序

   答案:从根视图开始,以递归的形式逐渐向上寻找可以处理该事件的view,响应则是从该返回的view开始,逐渐向后寻找可以处理该点击时间的viewhttp://smnh.me/hit-testing-in-ios/


8.iOS的生命周期及对应的方法

   答案:Inactive , active, background, suspended. 对应的方法则是AppDelegate中的那些方法

http://blog.csdn.net/totogo2010/article/details/8048652 


9.cell的重用机制:

   答案:在tableView中有一个属性是reuseCells,从其中获取可以重用的cell即可,如果没有则新生成。如果在一个tableview中只有一种cell的话,则内存中只有屏幕显示的cell数+1个cell.


10.简要介绍coreData:

    答案:主要介绍明白以下三种属性Managed Object Model这是数据库的表; Persistent Store Coordinator这是一个数据库连接; Managed Object Context 这可以是认为一个数据库操作的画板,几乎所有的数据库操作都要通过它来进行。


11.提高tableView的性能,既提高滚动时的顺滑度

    答案:请看stackOverflow上的一个高分答案

http://stackoverflow.com/questions/1352479/tricks-for-improving-iphone-uitableview-scrolling-performance


12.如何对图片进行缓存(和11题可以一起问)

    答案:使用NSCache等。目前流行的图片下载及缓存框架SDImageView也是使用NSCache来缓存图片的

http://stackoverflow.com/questions/11511548/best-way-to-cache-images-on-ios-app 


13.设计模式相关问题

    答案:设计模式可以单独写成一本书,我们主要了解OC中使用的设计模式,具体Cocoa Touch中使用了什么样的设计模式我一会补充上

 http://blog.csdn.net/xdrt81y/article/details/12128721


14.排序算法及相关的时间空间复杂度

    答案:见下图


15.请简单介绍运行时

    答案:因为OC是一门动态语言,所以可以讲一个对象需要调用的方法决定的时刻从编译时改到运行时,通过这个特性,我们可以实现消息在运行时间段的增加,修改,交换,转发等。

http://stackoverflow.com/questions/19314135/ios-runtime-use-case

http://www.justinyan.me/post/1624

http://stackoverflow.com/questions/13645666/objective-c-dynamic-properties-at-runtime/13646650#13646650


16.UIView和CALayer的关系和差别

     答案:CALayer用来展示,而UIView用来绘制。其中最大的差别是UIView可以相应事件,而CALayer不可以。

http://stackoverflow.com/questions/7826306/what-are-the-differences-between-a-uiview-and-a-calayer


17.GC(Gabbage collection) ARC 和MRC的关系

    答案:GC是java的垃圾回收机制,在系统认为需要回收的时候对那些对象进行一次统一的回收。而MRC使用引用计数机制,当引用计数为0时对对象进行释放,ARC是在编译的时候为对象加入相应地release等操作。

http://zhidao.baidu.com/link?url=6AMo1uLinyf5oG3X0UO3dYvweRKZ__3CtLDSQC3hPOJIttJ7oYCOZObwo85bWW9mKpW8LdKhhwSkFynhgHR1UJhI_45HWd4q_BXzLo3qMhO  


18.为什么要使用__Bridge

     答案:因为我们在使用GC的对象时,无法对其进行像NS的对象一样的内存管理。需要通过一个bridge来让系统对其进行管理。(这个标志只会在ARC中出现,MRC中不会)


19.ARC在什么情况下会产生内存泄露?

    答案:在循环引用时,具体包括:block中引用了self, timer中对其接受者进行了retain, delegate没有释放代理, iboutlets的修饰符为strong等。







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值