面试准备——iOS开发基础

APP相关

如何添加自定义字体到工程

文件格式一般为ttfttcotf
先将字体文件加到项目中,然后在工程plist中添加一项Fonts provided by application,这是个数组,然后添加一项,string类型,值为字体文件的文件名,如黑体.ttf
在程序中可以打印[UIFont familyNames],检查是否添加成功,并确认字体名称。
使用方法:[UIFont fontWithName:@"Heit" size:17]

如何制作一个静态库/动态库,他们的区别是什么?

  • 静态库:以.a.framework为文件后缀名。
  • 动态库:以.tbd(之前叫.dylib)和.framework为文件后缀名。

区别:

  • 静态库:链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。
  • 动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用(如系统的UIKit.framework等),节省内存。
    注:苹果不让使用自己的动态库,否则审核就无法通过。
    [1]

Configuration中,debug和release的区别是什么?

  • debug为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,为开发人员提供强大的应用程序调试能力。
  • release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。
    [2]

简单介绍下发送系统消息的机制(APNS)

打开带推送功能的APP,在有网络的情况下会连接苹果推送服务器,连接过程中,APNS会验证device_token,连接成功后维持一个长连接;
我们自己的服务器要推送消息时,把被推送的消息结合被推送设备的device_token一起打包发送给APNS服务器;
APNS服务器将推送信息推送给指定device_token的设备;
设备收到推送消息后通知我们的应用程序并显示和提示用户(声音、弹出框)
[3]

UI相关

系统如何寻找到需要响应用户操作的那个Responder

Hit-Test 机制[4]
系统检测到手指触摸(Touch)操作时,将Touch 以UIEvent的方式加入UIApplication事件队列中。UIApplication从事件队列中取出最新的触摸事件进行分发传递到UIWindow进行处理。UIWindow 会通过hitTest:withEvent:方法寻找触碰点所在的视图,这个过程称之为hit-test view。

UIApplication -> UIWindow -> Root View -> ··· -> subview

找到之后,会形成响应者链,先由最低层的view来处理,处理不了传给下一响应者。
3种情况无法响应
1.userInteractionEnabled=NO;2.hidden=YES;3.alpha=0~0.01

多屏幕尺寸的适配

AutoLayout,Masonry

UIButton的父类是什么?UILabel呢?

UIControl, UIView

push view controller 和 present view controller的区别

push是navigationControl的一种方法,添加页面入栈
present是任何页面都可以直接弹出,例如UIAlertControl

描述下tableview cell的重用机制

只创建屏幕最大数的cell,上面的cell完全移出屏幕,自动补到下面重用

UIView的frame和bounds的区别是什么

frame是对于superview的坐标系
bounds是自身坐标系,subview会根据bounds来确定位置


  1. 参考自:https://www.jianshu.com/p/90f5ec723175 ↩

  2. 参考自:https://blog.csdn.net/m18510011124/article/details/54091347 ↩

  3. 参考自:https://blog.csdn.net/ryantang03/article/details/8482259 ↩

  4. 参考自:http://www.cocoachina.com/ios/20160630/16868.html ↩

你可能感兴趣的:(面试准备——iOS开发基础)