APP相关
如何添加自定义字体到工程
文件格式一般为ttf
、ttc
、otf
。
先将字体文件加到项目中,然后在工程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来确定位置