在学习OC中,关于OC的几个重点概念想在这儿做几点总结和深入的了解。好了,话不多说,让我们开始吧:
1.关于继承和类别的区别
在OC中,给一个类扩展一个方法,有两种实现方式:类别和继承。
1.1 对于继承(Inherit):这个是面向对象语言都有的一个特性,子类会继承父类的方法和属性。OC作为一种面向对象的语言自然是少不了如此经典的特性。
对于以下情况,无法使用类别,必须使用继承。
1)新扩展的方法与原方法同名,但是还需要使用父类的实现。因为使用类别,会覆盖原类的实现,无法访问到原来的方法。
2)扩展类的属性,这个类别无法做到。也就是说,类别中只能实现向现有的类添加方法,不能添加属性和实例变量。
对于继承,你可以记住的是:
继承修改的方法不会对父类原方法产生影响;类别修改的方法相当于替换了原有方法。
以viewController为例,继承一个ViewController相当于建立一个新的页面;而给一个ViewController添加类别用于增加或修改原ViewController上的方法;
1.2 对于类别(category):这是OC的一个特性,可以在不改变类名和原有类的实现的前提下,实现对类的方法的扩展。
以下两种方式最好使用类别:
1)针对系统提供的一些类,例如:NSString,NSArray,NSNumber等类,系统本身不提倡使用继承去扩展方法,因为这些类内部实现对继承有所限制,所以最后使用类别来进行方法扩展。
2)类别支持开发人员针对自己构建的类,把相关的方法分组到多个单独的文件中,对于大型而复杂的类,这有助于提高可维护性,并简化单个源文件的管理。
所以,对于类别你可以记住的是:
类别用于添加新的方法无法改变原方法,如果冲突则覆盖,继承添加改变原方法并可以增加属性,继承功能更强大
2.对于面向对象的三大支柱
2.1 封装:我们定义一个类相当于封装了数据结构和操作数据的过程,让它们形成一个逻辑上的整体。编程中经常说的封装代码,其实就是把某个功能的相关代码提出来形成一个类或者方法,好处呢,需要自己体会。
2.2 从一个已经有的类创建新类的过程就叫做继承。提供继承信息的类成为父类(超类、基类);得到继承信息的类成为子类(派生类、衍生类)。通过继承我们可以让子类复用父类的代码(不在需要每个子类书写和父类相同的重复代码),与此同时我们可以创建子类对系统的功能提供了增强(子类是对父类的扩展和增强)。简单的说,如果你需要重复使用父类中某些变量或者方法自己又不愿意也没必要再写的那么继承将会是你不二的选择,既减轻工作负担又美化整个项目的代码整洁。
2.3 多态:子类继承父类的方法后,可以给父类的方法给出新的实现版本,这一过程称为方法的重写(也称为方法覆盖或方法置换)。由于不同的子类对父类的方法进行重写是可以给出各自的实现版本,同样的对象指针,接收到同样的消息,但是做了不同的事情,这就是多态。
如何实现多态(polymorphism)
方法重写: 在继承的过程中子类重写(override)父类方法 不同的子类给出不同的实现版本
对象造型: 用父类型的指针指向子类对象