1.分类:在不修改一个类的情况下给类增加方法,即在不知道.m的情况下给只能增加方法,但不能增加成员变量,可以添加属性,但是只会生成set和get方法的声明,不会生成成员变量,要想保存变量可以通过动态绑定的方式,同一个方法,在分类中的方法执行优先级高,同一个方法只执行一次
分类原理:原理是讲分类中的中方法、属性、协议放在category结构体里面,然后在运行时拷到对象的结构体重,但是对象的成员变量是在编译时已经分配好内存,分类在运行时加入变量会破坏对象的内存布局,因此不能在运行时添加变量,对象关联的KV对保存在一个全局的哈希表里面,当对象销毁时会释放所有关联的KV对
2.扩展:扩展有点像匿名的分类,但是它和分类是两个完全不同的东西,因为在.m中给类扩展私有的成员变量或者属性,可以扩展变量和方法,因此必须知道类的.m文件才能给类添加扩展。
扩展原理:扩展是在编译期内存就决定好了,是类的一部分