iOS社招面试题2

来源:互联网 发布:黑魂2日系妹捏脸数据 编辑:程序博客网 时间:2024/05/29 15:38

1.APNs推送过程
答:
1.去苹果开发者中心为应用注册APNs消息推送功能
2.苹果APNs收到应用的注册消息后,返回device_token(很重要)
3.将device_token传给本地push服务器
4.当执行推送消息,应用的本地服务器将要推送的消息和device_token打包发给APNs
5.APNs将消息推送回应用

2.iOS动画常用函数
答:
1.CABasicAnimation(基础动画,设定起、终点和时间,动画随着设点点移动,根据keyValue设定不同的效果如移动,颜色渐变)
2.UIBezierPath(贝塞尔曲线,创建基于矢量的路径,曲线、直线等都能绘制)
3.CAShapeLayer(坐标系统内绘制UIBezierPath,为UIBezierPath提供路径)
PS:了解动画先了解CALayer(图层,可以调整阴影、圆角大小、边框宽度和颜色等)、CAAnimation(动画)、CAAnimationGroup(动画组)

3.iOS app缓存数据线程安全措施
答:
1、加锁,对对象加锁,变原子性,缺点是会令app复杂性变大,竞争锁,死锁等问题,不是好的方案
2、分线程cache,一个线程一个cache,线程只针对自己的cache进行读写,缺点是要令使用者知道当前代码在哪条线程,还有多线程里的cache数据要同步。例子是CoreData 和 Realm
3、数据不可变,只读不写,若属性改变,直接替换整个对象,即重新在db读取,缺陷是上层仍持有旧对象,要用push(cache更新数据时发广播通知上层,上层收到后更新)和pull(上层在特定时间自己判断有否更新)结合更新数据

4.iOS如何防止内存泄漏
答:
1. arc
2. 如果不能用arc, 那么用shift+command B来做Analyze, 帮你找出各种内存漏洞
3. Instrument调试

5.网络通讯的理解
答: iOS设备的网络通信的方法,有如下两个大类:
1、使用socket的方式进行通信。
2、使用asynsocket/GCDSocket等类库进行通信。
用封装好的通讯方法更稳定,直接用socket则更灵活,eg:TCP要区分客户端和服务端,服务端要启动监听连接
宏观的网络通讯:本质就是电脑间的相互通讯,通讯遵循TCP/IP协议等一系列的协议族,整个网络通讯会经过ISO-OSI的七层协议,每个电脑一个ip地址,每个进程一个端口号

6.ios 如何有效快捷调试
答:
1.普通断点->条件断点(右击断点->Edit breakpoint->condition填写条件,ignore可以填前几次不理会,action选择在你断点的位置,执行各种操作,比如执行脚本命令,控制台命令(可以制定调试信息自定义保存)、打印信息等)
2.全局断点,用于EXEC_BAD_ACCESS:,打了全局断点时,只要遇到错误,debug程序就会自动定位到栈底的信息,也就是你最先出错的代码的那一行
3.添加Symbolic断点,添加之后在 Symbol 一栏输入 viewDidLoad,这样在程序中所有的 viewDidLoad 方法被调用时都会触发断点。也可以仅仅为特定的某个类的方法添加断点,如unrecognized selector sent to instance 0xaxxxx 这种错误,这个instance可以这样快速定位
4.NSLog打印obj可以用NSLog(“%s”,NSStringFromCGAffineTransform(obj));来打印未知类型变量
5.开启僵尸对象(Enable NSZombie Objects),步骤:Product->Scheme->Edit Scheme->Enable NSZombie Objects打勾,就可以输出被释放掉的僵尸变量,但、只能用在模拟器和OC语言
6.Console(lldb 命令),在断点时控制台打印变量,各种断点,各种打印,调用python插件,运行中断,操作硬件底层,控制程序运行线程……lldb都可以做到

0 0