IOS学习之作业篇(一)
平时学习时的课后作业归纳,仅自己学习使用.
实战技术
day01
+load
和+initialize
的区别是什么?
+load
:是在类加载到内存的时候调用,只会调用一次+initialize
:是在第一次使用类或者子类的时候调用,会调用多次
UITabBarCOntroller
控制器中view的内部结构?
- 存放子控制器的
view
tabbar
: height = 49;
day02
- 简述你对协议的理解?
- 为什么使用协议: 当有些事情,自己不想做,交给别人,就搞个协议.实例:Appdelegate
- 什么时候使用协议: 延展到封装自己框架(自定义类),常常通过协议给外界提供接.
- UICollectionView使用步骤?
UICollectionView
在创建的时候就需要初始化一个布局参数,设置数据.cell
必须通过注册,不能通过alloc创建.UICollectionView
默认内部并没有子控件,需要我们手动去添加自定义cell
day03
- category和extension的区别?
- category是分类;只能扩充方法,不能添加属性.
- extension是类扩展(匿名分类,类目);可以添加属性,也可以声明方法.
- category常常给系统类扩展方法.
- extension用于自定义类.
- runtime实现的机制是什么,有哪些用法,一般用于干嘛?
- runtime实现的机制是运行时机制:只有在运行的时候才能确定调用哪些方法
- 用法:
- 遍历类中所有属性和方法,可以自己写一套字典转模型工具类
- 动态给分类添加属性,需求:当想把一个属性保存系统的类中
- 交换方法,系统方法达不到我们需求,想给系统的方法扩充一些功能
- 动态添加方法
day04
- 什么时候会发生EXC BAD ACCESS异常?
- 解释EXC BAD ACCESS:野指针错误
- 怎么才会导致这个错误:访问不该访问的对象
- 避免这种:当一个对象被销毁,记得清空指针
- 怎么研究新的API?
- 百度 iOS10API
- WWDC和苹果官方文档 英文能力很好 毅力
- 在新xcode中创建项目,在旧的xcode去打开,发现很多错误,碰见一些感兴趣 查一查
- 查看别人blog,关注一些牛人微博,猫神,新的技术 及时更新 关注: 简书
项目准备
day01
- 你是怎么理解bounds的
- frame: 控件可视范围 相对于 父控件
- bounds: 也是指的是范围 指的是 控件可视范围 在 ‘内容中’ 区域 . 控件可视范围相对于内容
- 内容:每个控件都有自己内容,而且是无限大,而且这个控件的所有子控件都是相对于内容
- 数据传值的几种方式
- 顺传:直接定义属性传值
- 逆传:代理,block,通知
- 通知传值:当谁也拿不到谁的事情,可以采取使用通知传值
day02
- KVC底层怎么实现的?
KVC全称为key value coding
即键值编码:运行时动态的给对象发送setValue:forKey消息 设置数据;
底层实现:
- 去模型中查找有没有setValue:,直接调用这个对象setValue:赋值
- 如果没有setValue:,就在模型中查找value属性
- 如果没有value属性,就查找带_的成员属性
- 如果还没有就报
- KVO底层怎么实现的?
KVO全称为Key Value Observer
即键值监听:观察一个对象的某一个属性发生改变.当发生改变时,通知另外一个对象做事情;
底层实现:- 当第一次观察一个对象时,Runtime会动态的创建一个继承自该对象所属类的子类 NSKVONotifying_(父类的名字)
- 这个新创建的子类重写了所有被观察属性的 setter 方法,并且在内部给观察者发送通知,通知所有观察对象值的更改。
- 最后把这个对象所在类的 isa指针 指向这个新创建的子类
day03
- 简述项目开发的步骤
- 独立开发:
- 需求文档:描述下应用功能
- 查看原型图:描述app每个界面 和 怎么与用户交互
- 根据原型图搭建基本项目结构,开始按模块去开发
- 界面搭建完,再去查看接口文档,请求数据,然后展示
- 迭代开发:
- 根据组长,项目经理提供excel去做,这里就有每月的任务
- 需要去寻找找到对应的类做事情,1.根据类名,去猜 2.通过断点去调试,一层一层去寻找
- 独立开发:
- 如何做一个新的模块
- 根据原型图,划分结构
- 搭建界面
- 参照接口文档,请求数据,展示数据
- 调整界面细节,提高用户体验
- 处理界面业务逻辑(功能)