1. +load+initialize区别

    • +load: 是在类加载到内存的时候调用, 仅调用一次
    • +initialize: 是在第一次使用类或者子类的时候调用,会调用多次
  2. runtime

    • runtime实现的机制是运行时机制,

    • 用法:

      • 遍历类中所有属性和方法,可以自己写一套字典转模型工具类
      • 动态给分类添加属性,需求:当想把一个属性保存系统的类中交换方法,系统方法达不到我们需求,想给系统的方法扩充一些功能
      • 动态添加方法
  3. bounds理解

    • frame: 控件可视范围 相对于 父控件
    • bounds: 也是指的是范围 指的是 控件可视范围 在 ‘内容中’ 区域 . 控件可视范围相对于内容
    • 内容:每个控件都有自己内容,而且是无限大,而且这个控件的所有子控件都是相对于内容
  4. 数据传值

    • 顺传:直接定义属性传值
    • 逆传:代理,block,通知
    • 通知传值:当谁也拿不到谁的事情,可以采取使用通知传值
  5. KVC

    KVC全称为key value coding键值编码:运行时动态的给对象发送setValue:forKey消息 设置数据;

    • 当第一次观察一个对象时,Runtime会动态的创建一个继承自该对象所属类的子类 NSKVONotifying_(父类的名字)
    • 这个新创建的子类重写了所有被观察属性的 setter 方法,并且在内部给观察者发送通知,通知所有观察对象值的更改
    • 最后把这个对象所在类的 isa指针 指向这个新创建的子类
  6. 简述项目开发的步骤

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

    • 根据原型图,划分结构
    • 搭建界面
    • 参照接口文档,请求数据,展示数据
    • 调整界面细节,提高用户体验
    • 处理界面业务逻辑(功能)