面试总结

OC的理解与特性

. OC是一门面向对象的语言,三大特性:封装 继承 多态。静态语言特性(C++),动态语言的效率(动态绑定 动态加载)
. OC动态特性 动态类型(运行时再决定对象的类型 如: id类型) 动态绑定(对象实例化后,其属性和方法也都确定) 动态加载(不是一开始就加载所有的资源,而是执行代码到一定位置再记载所需的资源(不同机型的适配)) 运行时(基于run time)

内存管理基本原则

MRC : 谁创建 谁释放 谁引用 谁管理
ARC : 管理是系统自动管理,strong 和weak关键字 strong指向的对象retain count = 0时候,就会自动回收,weak指向的新值不存在时,其指针自动=nil

一般的注意事项

  1. 全局变量和局部变量 基本上都用_strong修饰
  2. 局部变量除了作用域,指针为nil
  3. 方法内部创建对象,外部使用需要添加_autorelease
  4. 连线的时候,用_weak
  5. 代理 用assign
  6. block为了避免循环,使用_weak描述
  7. 声明属性不要以new开头
  8. 非ARC工程中采用ARC去编译某些类:-fobjc-arc
  9. 在ARC工程中采用非ARC去编译某些类:-fno-fobjc-arc.

理解MVC设计模式

  • Model 负责存储 定义 操作数据
  • View 用来展示给用户 和用户交互
  • Controller 是Model 和 View的协调者。 Model 和 View不能直接进行通信。view和controller通信利用代理协议 model和controller通信利用notification和kvo

理解MVVM设计模式

  • viewModel层 就是view和model的粘合剂,基本上就是view controller的业务逻辑和页面逻辑等剥离出来放到view model层

category优缺点

优点

  • 不要通过子类增加现有类的方法,类目中的方法和原始类的方法基本没有区别
  • 通过类目可以将庞大一个类的方法进行划分,从而便于代码的日后维护 更新以及提高代码的阅读性

缺点

  • 无法向类目中添加实例变量(只能通过子类)
  • 不要覆盖父类中的方法,有可能会导致 super的断裂

类别的作用

  • 给系统原有类添加方法,不能扩展属性。
  • 声明私有方法,某一个方法只实现,不声明,相当于私有方法
  • 类别不能声明变量,类别不可以直接添加属性。

代理的作用

  • 代理又叫委托,是一种设计模式,代理是对象与对象之间的通信交互,代理接触了对象之间的耦合性
  • 改变或传递控制链。
  • 修饰用assign : 防止循环引用

include 和 import,import 与@class的区别

  • include 和 import效果相同,都是查询类中定义的方法
  • import不会引起重复编译
  • class 定义了类的名称,一般用于.h中
  • class 比 import 编译效率更高
  • class import 区别在于解决了引用死锁的问题

@public @protected @private 含义与作用

  • @public : 对象的实例变量作用域 在任何地方都可以访问
  • @protected : 对象的实例变量作用域 在本类和子类都可以访问
  • @private : 实例变量的作用域只能在本类中方法

内存优化

  • 重用机制 : 尽量用重用机制
  • 尽量把view设置成不透明
  • 不要使用复杂的xib/storyboard
  • 选择正确的数据结构
  • 延迟加载
  • 数据缓存
  • 处理内存警告
  • 避免反复处理数据
  • 使用Autorelease Pool
  • 正确选择图片加载方式

你可能感兴趣的:(面试总结)