object-c分类

分类

定义:通过分类(category)可以以模块的形式向类添加方法,以及创建标准化的方法列表提供给他人实现。

需求:有时候面对一个类定义,可能想要添加一些新的方法。

(1)如对于Fraction类,想要添加除了add之外的乘除等方法;

(2)假如你已经知道如何使用Foundation框架的数组类,名为:NSArray,并意识到希望这个类可以实现另一个或多个方法。当然,可以使用类的继承;但是这里有更简单的方式,就是通过分类。

1.Code实例:

Fraction.h

#import <Foundation/Foundation.h>

@interface Fraction: NSObject
@property int numerator,denominator;
-(void) print;
@end


@interface Fraction(OpMath)
-(Fraction *)add : (Fraction *)f;
@end

Fraction.m

#import "Fraction.h"

@implementation Fraction
@synthesize numerator,denominator;
-(void) print{
    NSLog(@"%i %i",numerator,denominator);
}
@end

@implementation Fraction(OpMath)
-(Fraction *) add: (Fraction *) f{
    //两个分数相加!
    Fraction *result = [[Fraction alloc] init];

    result.numerator = (numerator*f.denominator)+(denominator*f.numerator);
    result.denominator = denominator*f.denominator;

    return result; //返回值 
}
@end

main.m

#import "Fraction.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {

        Fraction *f1 = [[Fraction alloc] init];
        Fraction *f2 = [[Fraction alloc] init];
        Fraction *result;

        f1.numerator = 2;f1.denominator = 5;
        f2.numerator = 1;f2.denominator = 5;

        result = [f1 add:f2 ];

        [result print];
    }
    return 0;
}

2.关于分类的注意事项:

(1)分类可以覆写该类中的另一个方法,但通常不这么做,认为不好;(因为在Object-c的分组设计中,覆写一个方法后,以前的方法不能再访问;但是如果是子类的继承覆盖,仍然和java一样,可以通过使用super来进行调用。)

(2)如果对一个根类定义了新方法(分类),那么会影响到其所有的子类,每个子类都会继承这些新方法,这样就会存在潜在的危险。

(3)分类的命名规则:一般可以使用类名+分类名的方式。

(4)分类可以访问原始类定义的变量,但是不能再定义属性,如果需要再定义,则需要声明子类来实现。

(5)一个类可以有多个分类。

(6)和接口的不同:

不必实现分类的所有方法,这个对程序的拓展很有用,因为可以再该分类的声明中声明所有的方法,然后在一段时间之后再来实现它。


总结:

关于分类,我感觉使用在扩展那些你无法看到类的实现代码的类的,你可以为这些类添加扩展函数,可以重载源类中的成员函数,来满足自己的实际需求,但是对于那些你可以看到类的实现、访问的类来说,你则完全没有必要写分类。另外对于那些需要分工合作的工作,也是适合写分类的地方。
另外一点也是需要注意的是:
如果你用分类的方式重载了Cocoa类,那么你的App就有可能同不过苹果的作品审核,因为苹果对这些自定义的修改的要求是极其严格,甚至说是苛刻的。
因此,不建议使用objective-c语言的分类。

总结摘自:http://blog.csdn.net/braddoris/article/details/24620199





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值