01.+load和+initialize的区别是什么?
调用时刻:
load:类加载进内存调用
initialize:当第一次使用类或者子类就会调用
调用次数
load只会调用一次
initialize:不确定,具体根据子类和具体调用情况
比如有个类,它有一个子类,第一次使用子类,父类的initialize调用2次
02.UITabBarController控制器中view的内部结构
1).存放子控制器的view:
2).UITabBar: 49
03.简述你对协议的理解?
什么时候使用协议,为什么要搞个协议
为什么使用协议: 思想:当有些事情,自己不想做,交给别人,就搞个协议.实例:Appdelegate
什么时候使用协议: 高级:延展到封装自己框架(自定义类),常常通过协议给外界提供接口(协议)
04.UICollectionView使用步骤?
1.一定要初始化布局 *
2).设置数据源,展示 代理.处理cell点击
3).cell必须通过注册 *
4).cell必须要自定义 *
05.category和extension的区别
category:分类,可以取名
extension:扩展,类目,匿名
作用?
category:可以扩展方法,不能添加属性
extension:可以添加属性,也可以声明方法
用法(区别):
category通常用于给系统类 扩充方法
extension通常用于自定义类
06.runtime实现的机制是什么,有哪些用法,一般用于干嘛
运行时机制,调用方法,一开始不确定哪个对象去吊用,等运行的时候才会找到相应对象去调用方法。
1).遍历类中所有属性和方法,可以自己写一套字典转换模型工具类.
2).动态给分类添加属性,需求:当想把一个属性保存系统的类中.
3).交换方法,系统方法达不到我们的需要,想给系统的方法扩充一些功能.
4).动态添加方法.
1.遍历类所有属性和方法
07.什么时候会发生EXC BAD ACCESS异常?
1).解释EXC BAD ACCESS异常?
2).怎么才会导致这个错误:访问不该访问的对象.
3).避免这种:当一个对象被销毁,记得清空指针.
08.怎么研究新的API
1).百度 iOS10API
2).WWDC和苹果官方文档
3).在新Xcode中创建项目,在旧的Xcode打开,发现很多错误,查一查.
4).查看别人的博客,如猫神,新的技术及时更新 如:简书.
09-你是怎么理解bounds的
frame: 控件可视范围 相当于 父控件
bounds: 也是指的是范围 指的是 控件可视范围 在 内容中 区域 . 控件可视范围相对于内容
内容:每个控件都有自己内容,而且是无限大,而且这个控件的所有子控件都是相对于内容
bounds:以自己内容为原点
10-数据传值的几种方式
顺传:直接定义属性传值
逆传:代理,block
通知传值:当谁也拿不到谁的事情,可以采取使用通知传值
11-KVC底层怎么实现的
1.根据key转换成对应set方法,去对象中找到有没有对应的set方法
2.根据key去查找有没有对应成员属性,不带下划线
3.根据key去查找有没有带下划线的成员属性
4.直接报找不到对应key错误
所以在通常开发中,一般会保证模型的属性名根字典一一对应,当然我们一种解决方式,
可以重写报错的方法,目的,把报错方法实现给干掉,就不会报错,这样就可以不用蓝模型中属性与字典一一对应
12-KVO底层怎么实现的
Person的name属性改变
1.生成Person一个派生类(子类) Person_KVO
2.在这个子类中重写setName方法 1.给成员属性赋值 2.通知观察者调用observeValueForKeyPath
3.改变person对象isa 改成Person_KVO
13-简述项目开发的步骤
独立开发
1.需求文档:描述下应用功能
2.查看原型图:描述app每个界面 和 怎么与用户交互
3.根据原型图搭建基本项目结构,开始按模块去开发
4.界面搭建完,再去查看接口文档,请求数据,然后展示
当你做项目的时候,碰见一些什么问题. 简历中有一些项目,每个项目列举两个比较难题
百思不得姐:获取全局导航条的时候,最好不要使用appearance , 应该去使用appearanceWhenInContain
迭代开发
1.根据组长,项目经理提供excel去做,这里就有每月的任务
2.需要去寻找找到对应的类做事情,1.根据类名,去猜 2.通过断点去调试,一层一层去寻找
14-如何做一个新的模块
1.根据原型图,划分结构
2.搭建界面
3.参照接口文档,请求数据,展示数据
4.调整界面细节,提高用户体验
5.处理界面业务逻辑(功能)