黑马程序员---OC学习笔记之分类(Catgory)的概念及使用

------Java培训、Android培训、iOS培训、.Net培训--------

1、分类的概念

在不改变原有类的情况下,给原有类添加方法

【Category】是OC特有的语法,其他语言没有。类似于C#中的扩展方法和partial关键字。

【实质】一些方法的声明和实现

2、作用

1)在不修改原有类的基础上增加新的方法

2)一个庞大的类可以分模块开发

3)一个庞大的类可以有多个人来编写,更利于团队合作

 

3、使用分类的目的

1)对现有类进行扩展

 

2)作为子类的替代手段

不需要定义和使用一个子类,可以通过类别直接想已有的类增加方法

3)对类中的方法归类

利用category把一个庞大的类划分为小块进行开发,从而更好的对类中的方法进行更新和维护。

 

4、使用分类的步骤

先声明分类-->实现分类--->使用分类

【注意】分类的命名规则:类名+扩展方法:如:“NSString+countNum

分类的接口声明与类的定义十分相似,但分类不继承父类,只需要带有一个括号,表明该分类的主要用途。

【声明一个分类】

格式:

@interface 待扩展类名 (分类名称)

【实现分类】

@implementation 待扩展类名 (分类名称)

【调用类别中的方法】

与一般成员方法调用形式完全一样。【需要包含类别的头文件】


5、使用注意事项

1、分类只能增加方法方法,不能增加成员变量

1)在分类中不能声明实例变量

2)也不能使用@property

2、分类可以访问原来类的成员变量

3、如果分类中方法与原类中方法同名,优先调用分类中方法

4、在多个类别中有同名的方法时,【执行最后编译的那个类别中的同名方法】


6、分类使用举例

Person.h文件内容】

#import <Foundation/Foundation.h>
#pragma mark Person 类声明部分
@interface Person : NSObject{
    int _age;
    NSString *_name;
}
@property(nonatomic,assign) int age;
@property(nonatomic,strong) NSString *name;
-(void) eat;
 
@end


Person+base.h文件内容】

#pragma mark Person  分类声明部分
 
@interfacePerson(base)
 
//int sex;//这样会在编译时报错
//@property int sex;//编译时不报错,但是使用sex时会报错(如p.sex = 1),找不到setSex方法
 
//声明扩展的方法
-(void) eat;
 
-(void)run;
@end


 

Person.m文件内容】

 #pragma mark Person  类实现部分
@implementation Person
-(void) eat{
    NSLog(@"Person eat food....");
}
@end
 


Person+base.m文件内容】

 

#pragma mark Person  分类实现部分
@implementation Person(base)
-(void)eat{
    //分类中可以调用原类中的成员变量
    NSLog(@"%@ eat food....",self.name);
}
 
-(void)run{
    NSLog(@"%@ run....",self.name);
}
@end
 


 

main.m文件内容】

#import "Person.h"
#import "Person+base.h" //分类头文件也要引入
int main(int argc, const char * argv[])
{
 
    @autoreleasepool {
        Person *p = [Person new];
        p.name = @"Amos";
        //Person类对象可以调用分类中的方法,就跟调用原有类中的一样
        [p run];
        //Person类与其分类中有同名方法,优先调用分类中的方法
        [p eat];
 
   }
    return 0;
}


 

【打印结果】

2015-10-07 09:54:09.439 加强02[616:303] Amos run....

2015-10-07 09:54:09.441 加强02[616:303] Amos eatfood....



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值