以下内容基于字节跳动iOS面试中真实遇到的题目,涵盖基础知识、算法、网络、多线程和系统设计等多个方面。适合面试准备者系统复习。
以下内容基于字节跳动iOS面试中真实遇到的题目,涵盖基础知识、算法、网络、多线程和系统设计等多个方面。适合面试准备者系统复习。
本篇我们来讲一下 【iOS面试题的视图&图形】相关的问题.
主要问题列表如下:
本文主要是针对iOS通知机制
的全面解析,从接口到原理面面俱到。同时也解决了阿里、字节:一套高效的iOS面试题
中关于通知的问题,相信看完此文再也不怕面试官问我任何通知相关问题了
由于苹果没有对相关源码开放,所以以GNUStep源码为基础进行研究,GNUStep虽然不是苹果官方的源码,但很具有参考意义,根据实现原理来猜测和实践,更重要的还可以学习观察者模式的架构设计
今天这一篇我们来讲一下 Runloop和KVO
本章的主要回答的问题如下:
1 | // 发送通知 |
在解释这些内容之前 强烈建议认真研读一下这篇 一文全解iOS通知机制(经典收藏)文章 了解一下大概 所有的问题就迎刃而解了.
__block
修饰与否的区别?block的变量截获__block
__strong
、__weak
修饰block
发生copy
时机Block
访问对象类型的auto
变量时,在ARC
和MRC
下有什么区别在回答所有问题之前我们需要了解一些block背景相关的知识. 如下:
数据结构的存储一般常用的有两种 顺序存储结构 和 链式存储结构
顺序存储结构:
比如,数组,1-2-3-4-5-6-7-8-9-10,存储是按顺序的。再比如栈和队列等
链式存储结构:
比如,数组,1-2-3-4-5-6-7-8-9-10,链式存储就不一样了 1(地址)-2(地址)-7(地址)-4(地址)-5(地址)-9(地址)-8(地址)-3(地址)-6(地址)-10(地址)。每个数字后面跟着一个地址 而且存储形式不再是顺序
时间频度
一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道.但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了.并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多.一个算法中的语句执行次数称为语句频度或时间频度.记为T(n).
业务分层、解耦,使代码变得可维护;
有效的拆分、组织日益庞大的工程代码,使工程目录变得可维护;
便于各业务功能拆分、抽离,实现真正的功能复用;
业务隔离,跨团队开发代码控制和版本风险控制的实现;
模块化对代码的封装性、合理性都有一定的要求,提升开发同学的设计能力;
在维护好各级组件的情况下,随意组合满足不同客户需求;(只需要将之前的多个业务组件模块在新的主App中进行组装即可快速迭代出下一个全新App)
1.最常用的就是cell的重用, 注册重用标识符
如果不重用cell时,每当一个cell显示到屏幕上时,就会重新创建一个新的cell
如果有很多数据的时候,就会堆积很多cell。
如果重用cell,为cell创建一个ID,每当需要显示cell 的时候,都会先去缓冲池中寻找可循环利用的cell,如果没有再重新创建cell