平时学习时的课后作业归纳,仅自己学习使用.

实战技术

day01

  1. +load+initialize的区别是什么?
  • +load:是在类加载到内存的时候调用,只会调用一次
  • +initialize:是在第一次使用类或者子类的时候调用,会调用多次
  1. UITabBarCOntroller控制器中view的内部结构?
  • 存放子控制器的view
  • tabbar: height = 49;

day02

  1. 简述你对协议的理解?
  • 为什么使用协议: 当有些事情,自己不想做,交给别人,就搞个协议.实例:Appdelegate
  • 什么时候使用协议: 延展到封装自己框架(自定义类),常常通过协议给外界提供接.
  1. UICollectionView使用步骤?
  • UICollectionView在创建的时候就需要初始化一个布局参数,设置数据.
  • cell必须通过注册,不能通过alloc创建.
  • UICollectionView默认内部并没有子控件,需要我们手动去添加自定义cell

day03

  1. category和extension的区别?
  • category是分类;只能扩充方法,不能添加属性.
  • extension是类扩展(匿名分类,类目);可以添加属性,也可以声明方法.
  • category常常给系统类扩展方法.
  • extension用于自定义类.
  1. runtime实现的机制是什么,有哪些用法,一般用于干嘛?
  • runtime实现的机制是运行时机制:只有在运行的时候才能确定调用哪些方法
  • 用法:
    • 遍历类中所有属性和方法,可以自己写一套字典转模型工具类
    • 动态给分类添加属性,需求:当想把一个属性保存系统的类中
    • 交换方法,系统方法达不到我们需求,想给系统的方法扩充一些功能
    • 动态添加方法

day04

  1. 什么时候会发生EXC BAD ACCESS异常?
  • 解释EXC BAD ACCESS:野指针错误
  • 怎么才会导致这个错误:访问不该访问的对象
  • 避免这种:当一个对象被销毁,记得清空指针
  1. 怎么研究新的API?
  • 百度 iOS10API
  • WWDC和苹果官方文档 英文能力很好 毅力
  • 在新xcode中创建项目,在旧的xcode去打开,发现很多错误,碰见一些感兴趣 查一查
  • 查看别人blog,关注一些牛人微博,猫神,新的技术 及时更新 关注: 简书

项目准备

day01

  1. 你是怎么理解bounds的
  • frame: 控件可视范围 相对于 父控件
  • bounds: 也是指的是范围 指的是 控件可视范围 在 ‘内容中’ 区域 . 控件可视范围相对于内容
  • 内容:每个控件都有自己内容,而且是无限大,而且这个控件的所有子控件都是相对于内容
  1. 数据传值的几种方式
  • 顺传:直接定义属性传值
  • 逆传:代理,block,通知
    • 通知传值:当谁也拿不到谁的事情,可以采取使用通知传值

day02

  1. KVC底层怎么实现的?
    KVC全称为key value coding键值编码:运行时动态的给对象发送setValue:forKey消息 设置数据;
    底层实现:
  • 去模型中查找有没有setValue:,直接调用这个对象setValue:赋值
  • 如果没有setValue:,就在模型中查找value属性
  • 如果没有value属性,就查找带_的成员属性
  • 如果还没有就报
  1. KVO底层怎么实现的?
    KVO全称为Key Value Observer键值监听:观察一个对象的某一个属性发生改变.当发生改变时,通知另外一个对象做事情;
    底层实现:
    • 当第一次观察一个对象时,Runtime会动态的创建一个继承自该对象所属类的子类 NSKVONotifying_(父类的名字)
    • 这个新创建的子类重写了所有被观察属性的 setter 方法,并且在内部给观察者发送通知,通知所有观察对象值的更改。
    • 最后把这个对象所在类的 isa指针 指向这个新创建的子类

day03

  1. 简述项目开发的步骤
    • 独立开发:
      • 需求文档:描述下应用功能
      • 查看原型图:描述app每个界面 和 怎么与用户交互
      • 根据原型图搭建基本项目结构,开始按模块去开发
      • 界面搭建完,再去查看接口文档,请求数据,然后展示
    • 迭代开发:
      • 根据组长,项目经理提供excel去做,这里就有每月的任务
      • 需要去寻找找到对应的类做事情,1.根据类名,去猜 2.通过断点去调试,一层一层去寻找
  2. 如何做一个新的模块
  • 根据原型图,划分结构
  • 搭建界面
  • 参照接口文档,请求数据,展示数据
  • 调整界面细节,提高用户体验
  • 处理界面业务逻辑(功能)