Objective-C中分类 (category)和扩展(Extension)以及继承(inherit)

1、分类(category)

我们可以为一个类创建一个新的方法,而不需要在代码中编辑类定义。
下面定义并使用分类的例子程序,通过举例来很好的理解。
我们可以给Object-C中的NSString 添加camelCaseString分类,使用addMoenyUnitString方法,为所有的数字增加一个单位符号¥。
 
#import <Foundation/Foundation.h>

/*
<strong>定义分类</strong>的过程大致可分为以下几个步骤:
	第一步、创建一个带有接口的新文件,即创建已有类
 
	第二步、在新文件中添加需要扩展的方法及方法的实现,即需要添加的分类
 */
//NSString 表示将要添加分类的类名称,该类必须是已存在的。
//UnitEnded 是为类添加的方法名称。
//<strong>注意:只能添加方法,不能添加变量。</strong>
//头文件命名惯例:ClassName+CategoryName.h
@interface NSString (UnitEnded)

-(NSString*) unitEndedString;

@end

@implementation NSString (UnitEnded)

-(NSString*) unitEndedString
{
    //把数组的字符输出
    NSString *output = @"";
        output = [<span style="font-family:Arial;">self  </span>stringByAppendingString:@"¥"];
    return output;	
}
@end

2、扩展(Extension)

扩展是一种匿名分类;但是和匿名分类还是有区别的,扩展可以添加新的实例变量。 从Xcode 4 之后就推荐在自定义类的.m文件中使用扩展,这样就能保证良好的代码封装性,避免把私有接口暴露给外面。
举个例子:
@interface MyClass : NSObject
- (float)value;
@end
 
 
@interface MyClass () { //注意此处:扩展,扩展是没有名字的
    float value;
}
- (void)setValue:(float)newValue;//扩展的方法
@end
 
@implementation MyClass
 
- (float)value {
    return value;
}
 
- (void)setValue:(float)newValue {
    value = newValue;
}
 
@end

3、继承(inherit)

继承要远远高级于分类和扩展。
@interface Ball
	{
		@public NSString* color;
	   
	   }
@interface FootBall : Ball
	{
	
	}
总结
1、分类不能在类中增加变量,只能增加方法
2、扩展可以增加变量和方法
3、分类和扩展可以有和原有类相同的方法,但是会发出警告,被分类的类的此方法就不能再用了
4、继承的话可以重写方法,也可以增加变量属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值