文章目录

@[TOC](文章目录)

分类定义分类的使用使用场景使用注意点

Extension 扩展分类和扩展的区别

继承的定义使用注意点

新建一个分类

分类基础知识

分类

分类是指为已有的类添加方法,也可以说是将很多很复杂的代码划分为几个分区。

定义

分类的作用是扩展已有类的功能 类别是OC特有的属性,可以在不改变类名和原类的实现的前提下,进行累的扩展。

为原有的类增加方法 在方法内部可以访问原有类的成员变量,但这些成员变量一定要定义在头文件中。

分类的使用

为原有的类创建一个分类在分类中新增方法的实现和声明

使用场景

针对系统的一些类进行扩展,如NSSting,NSArray,NSNumber等类,系统本身不提倡使用继承去扩展方法,因为这些类内部的实现对继承有所限制,所以最好使用分类的方式进行扩展。类别支持开发人员针对自己构建的类,把相关的方法分组到多个单独的文件中,针对大型复杂的类,可以提高维护和可读性,便于管理。

使用注意点

可以在分类中添加成员变量和方法,但是添加的成员变量不会自动生成setter和getter方法,需要在实现部分实现 OC是动态语言,方法真正的实现都是通过runtime实现的,虽然系统不会给生成setter/getter,但是我们可以通过runtime手动添加setter/getter 不能在分类中定义与原类相同名方法,不同分类中也不能定义同名方法,如果在分类中增加了与原类同名方法,那么分类中的方法会覆盖原有类的方法,如果多个分类中有相同方法,执行最后编译的方法。 分类需要#import

Extension 扩展

Extension是Category的一个特例,又被称为“匿名分类” 分类的使用: 扩展为一个类添加额外的原来没有的变量,属性,方法。 一般类扩展写在.m文件中 一般私有的属性写在.m文件中的扩展中

分类和扩展的区别

类别在原则上只能增加方法类扩展不仅可以增加方法,还可以增加实例变量(或者属性),只是该实例默认是@private类型的(使用范围只在自身类,而非子类或者其地方)类扩展中声明的方法没有被实现,编译器警告,但是类别中方法没有被实现编译器不会有任何提示。因为类扩展是在编译阶段被添加到类中,而类别是在运行中被添加到类中的类扩展不能像类别那样拥有独立的实现部分(implementation),也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。定义在.m文件中的类扩展方法是私有的,定义在.h中的类扩展方法是公有的

继承的定义

继承是指一个新类拥有被继承类(父类)的全部属性和方法。 优点:代码重用,父类在不知道具体实现的情况下,就可以构建业务流程。 缺点:父类的改变影响所有子类,子类和父类的耦合性较高。

使用

当子类中需要自己独特的行为,而不想使用父类的方法,可以把父类的方法覆盖掉,直接在子类中用同样的名字重写这个方法(重载over right)。如果重写了父类的方法,但是还想在使用父类的功能,则使用super调用父类的方法。在继承体系中,方法的调用顺序是:在自己的类中找,去父类找,去父类的父类中找,一直找到基类。OC中只有实现没有声明的方法,是私有方法,不能在外边直接访问,但它绝对不是私有

注意点

OC中,类方法也可以是继承的(可以通过子类的类名调用父类的类方法),类方法也是可以重写的类方法可以和对象方法重名(+表示类方法,-表示对象方法)。子类中不能定义与父类同名的成员变量一个类只能继承一个直接父类可以多层继承

新建一个分类

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: