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

一、类目:

类目:也称类别、分类。

类目:类别(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值