oc 基础知识总结一:类目和继承的区别

来源:互联网 发布:淘宝怎么改一口价 编辑:程序博客网 时间:2024/06/11 17:43

一、类目:

类目:也称类别、分类。

类目:类别(category)是对于一个功能完备的类的一种补充,就像是一个东西基本的功能都完成了,可以用类别为这个类添加不同的组件,使得这个类能够适应不同的情况的需求。类目可以为一个现有的类扩展新的方法,扩展的方法会成为原始类的一部分,子类可以继承通过类目扩展的方法。oc语言的一个特性,可以在不改变类名和原来类的实现的前提下,实现对类的方法的扩展。

类别文件的命名:原类的名称+扩展标识名

继承:多个类具有相同的实例变量和方法时,考虑用继承。即子类可以继承父类的相同的特性。面向对象语言都有的一个特性。

相同点:都是可以重写父类的方法,都是给一个类进行扩展。

区别:
1、类目是对方法的扩展,不能添加成员变量。继承可以在原来的父类的成员变量的基础上,添加新的成员变量。
2、类别只能添加新的方法,不能修改和删除原来的方法。继承可以增加、修改、删除方法。
3、类别不提倡对原有的方法进行重载。继承可以通过使用super对原来的方法进行重载。
4、类别可以被继承,如果一个父类中定义了类别,那么子类中也会继承次类别。

只能使用继承,不能使用类别的情况:
1》新扩展的方法与原方法同名,但是还需要使用父类的实现。因为使用类别,会覆盖原类的实现,无法访问到原来的方法。(类别的优先级比较高)。
2》扩展类的属性,这个类别无法做到。
继承的代码示例:
继承的示例:自定义一个UITableViewCell继承于UITableViewCell
代码部分:
chatCell.h

#import <UIKit/UIKit.h>

@interface ChatCell :UITableViewCell

//继承的方法,成员变量

@end

ChatCell.m
//方法的实现

#import "ChatCell.h"

@interface ChatCell ()

{

如:

    UIMenuItem *copyItem;//复制

    UIMenuItem *transmitItem;//转发

    UIMenuItem *deleteItem;//删除

}

@property (nonatomic,strong)UILabel *timeLabel;

。。。

@end



@implementation ChatCell

//方法实现
@end

使用类别的情况:
1》针对系统提供的一些类(如:NSString、NSArray、NSNumber等),系统本身不提倡使用继承去扩展方法,因为这些类内部实现对继承有所限制,所以最后使用类别来进行扩展。
2》类别支持开发人员针对自己构建的类,把相关的方法分组到多个单独的文件中,对于大型而复杂的类,这有助于提供可维护性,并简化单个源文件的管理。

类别示例:扩展UIImage的stretchImageWithImageName方法
代码:

UIImage+Stretch.h文件

#import <UIKit/UIKit.h>


@interface UIImage (Stretch)

+(UIImage *)stretchImageWithImageName:(NSString *)imageName withWidth:(CGFloat)stretchWidth withHeight:(CGFloat)stretchHeright;

@end

UIImage+Stretch.m文件

#import "UIImage+Stretch.h"


@implementation UIImage (Stretch)

+(UIImage *)stretchImageWithImageName:(NSString *)imageName withWidth:(CGFloat)stretchWidth withHeight:(CGFloat)stretchHeright{

    UIImage *image = [UIImageimageNamed:imageName];

    return [imagestretchableImageWithLeftCapWidth:stretchWidthtopCapHeight:stretchHeright];

}

@end


注:此处的代码只是在ios中的定义,没有书写具体的例子。
定义的总结:
定义类别:父类名(扩展名)
定义继承:子类名:父类名

1 0
原创粉丝点击