黑马程序员---OC Category

类别的作用

在不修改原有的类的基础上增加新的方法
一个庞大的类可以分模块开发
一个庞大的类可以由多个人来编写,更有利于团队合作

使用类别的目的

1)对现有类进行扩展:
可以扩展
Cocoa touch框架中的类,在类别中增加的方法会被子类所继承,而且在运行时跟其他的方法没有区别。

2)作为子类的替代手段:不需要定义和使用一个子类,可以通过类别直接向已有的类里增加方法。

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


.h文件中,声明类别:

@interface ClassName (CategoryName)

NewMethod; //在类别中添加方法,不允许在类别中添加变量

@end


声明类别格式


1)新添加的方法必须写在 @interface 与@end之间
2)ClassName 现有类的类名(要为哪个类扩展方法)

3)CategoryName 待声明的类别名称
4)NewMethod 新添加的方法


在.m文件中(也可以在.h中实现),实现类别:

@implementation ClassName(CategoryName)
{

......

}

@end


实现类别格式


1)新方法的实现必须写在@ implementation@end之间

2)ClassName 现有类的类名

3)CategoryName 待声明的类别名称

4)NewMethod 新添加的方法的实现 


分类的使用注意事项


1)分类只能增加方法, 不能增加成员变量、@property(可能编译不报错,但是运行有问题

@interface Person (study)

@property int age;

-(void)study;
-(
void)work;

@end

#import <Foundation/Foundation.h>

#import "Person.h"
#import "Person+study.h"
int main(int argc, const char * argv[]) {

@autoreleasepool {
Person *p = [Person new];

[p eat];
[p
run];

p.age = 10;

}

return 0;

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

如:

#import <Foundation/Foundation.h>


//原类

@interface Person : NSObject

{

    @public

    int _age;

}

@end

//类别

@implementation Person (study){

     - (void)study{

     NSLog(@"age = %d",_age);

}

@end


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        //对象

        Person *p = [Person new];

        [p study];

        

    }

    return 0;

}


非正式协议

非正式协议就是给NSObject类创建的类目(分类)又叫做非正式协议, 非正式协议一般不需要进行实现,一般在子类中进行方法的重写。 

统计一个字符串中阿拉伯数字的个数

NSString *str = @"ada12sfasdf1213234asfda 32424 121 aa11afdsf"; 

@interface NSString (count)


-(void)countStrNum;


@end


@implementation NSString (count)


-(void)countStrNum{

int count=0;
//遍历字符串
for(int i=0;i<self.length;i++){ 

//获取字符串的每一个字符
unichar c = [self characterAtIndex:i];//判断是否是阿拉伯数字
if (c>='0' && c<='9') {

//如果是阿拉伯数字,则+1

count++;}

}

NSLog(@"count = %d",count);} 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值