OC的理解与特性
. OC是一门面向对象的语言,三大特性:封装 继承 多态。静态语言特性(C++),动态语言的效率(动态绑定 动态加载)
. OC动态特性 动态类型(运行时再决定对象的类型 如: id类型) 动态绑定(对象实例化后,其属性和方法也都确定) 动态加载(不是一开始就加载所有的资源,而是执行代码到一定位置再记载所需的资源(不同机型的适配)) 运行时(基于run time)
内存管理基本原则
MRC : 谁创建 谁释放 谁引用 谁管理
ARC : 管理是系统自动管理,strong 和weak关键字 strong指向的对象retain count = 0时候,就会自动回收,weak指向的新值不存在时,其指针自动=nil
一般的注意事项
- 全局变量和局部变量 基本上都用_strong修饰
- 局部变量除了作用域,指针为nil
- 方法内部创建对象,外部使用需要添加_autorelease
- 连线的时候,用_weak
- 代理 用assign
- block为了避免循环,使用_weak描述
- 声明属性不要以new开头
- 非ARC工程中采用ARC去编译某些类:-fobjc-arc
- 在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
- 正确选择图片加载方式