推荐阅读:关于iOS面试题汇总(栏目持续更新)
各位最近应该忙于跳槽与面试吧,毕竟金三银四,珍惜好机会,预祝大家面试顺利通过,迎接大厂offer。有需要资料可以私聊我了解
从输入url到页面展示到底发生了什么
- 1、输入地址
- 2、浏览器查找域名的 IP 地址
- 3、浏览器向 web 服务器发送一个 HTTP 请求
- 4、服务器的永久重定向响应
- 5、浏览器跟踪重定向地址
- 6、服务器处理请求
- 7、服务器返回一个 HTTP 响应
- 8、浏览器显示 HTML
- 9、浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等)
iOS高频(基础+底层)面试题
你在开发过程中常用到哪些定时器,定时器时间会有误差吗,如果有,为什么会有误差?
iOS中常NSTimer、CADisplayLink、GCD定时器,其中NSTimer、CADisplayLink基于NSRunLoop实现,故存在误差,GCD定时器只依赖系统内核,相对一前两者是比较准时的。
误差原因是:与NSRunLoop机制有关, 因为RunLoop每跑完一次圈再去检查当前累计时间是否已经达到定时设置的间隔时间,如果未达到,RunLoop将进入下一轮任务,待任务结束之后再去检查当前累计时间,而此时的累计时间可能已经超过了定时器的间隔时间,故会存在误差。
block是类吗,有哪些类型?
block也算是个类,因为它有isa指针,block.isa的类型包括
- _NSConcreteGlobalBlock 跟全局变量一样,设置在程序的数据区域(.data)中
- _NSConcreteStackBlock栈上(前面讲的都是栈上的 block)
- _NSConcreteMallocBlock 堆上
这个isa可以按位运算
block的分类,__block的作用,block循环引用产生的原因及解决办法
- blcok分为全局blcok,堆block,栈block。
- 在 MRC下:只要没有访问外部变量,就是全局block。访问了外部变量,就是栈block。显示地调用[block copy]就是堆block。
- 在 ARC下:只要没有访问外部变量,就是全局block。如果访问了外部变量,那么在访问外部变量之前存储在栈区,访问外部变量之后存储在堆区。
- __block的作用:将外部变量的传递形式由值传递变为指针传递,从而可以获取并且修改外部变量的值。同样,外部变量的修改,