A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 许本亮 中级黑马   /  2015-11-10 12:03  /  941 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

分类 category:可以给某一个类扩充一些方法 (不修改原来类的代码)
声明 : @interface   类名(分类名称)
              @end
实现 : @implementation   类名(分类名称)
              @end
使用注意:
1.分类只能增加方法,不能增加成员变量
2.分类方法实现中可以访问原类中声明的成员变量
3.分类可以重新实现原来类中的方法,但会覆盖掉原来的方法,会导致原来的方法没法再使用
4.方法调用优先级:分类( 最后参与编译的类优先)——》原来的类——》父类
给NSString 添加一个类方法:计算某字符串中阿拉伯数字的个数
给NSString扩充对象方法:计算当前字符串的阿拉伯数字的个数@“abc4535klkl55”
*非正式协议: 非正式协议通常定义为NSObject的类别(分类)。
    所谓非正式协议就是分类,即凡是NSObject或其子类Foundation框架中的类增加的分类都是非正式协议
  如:NSString+Number   非正式协议
         Person+run   普通分类
*类的延展
延展类别又称延展(Extendsion)
延展是分类的一个特例:其名字为匿名(空),并且新添加的方法一定要给予实现(不实现编译报错,分类没有这个限制,因为类扩展是在编译阶段被添加到类中,而类别是在运行时添加到类中),而且可以增加成员变量 (分类中不可以)
//一般放入.m文件中,使方法相对私有
@interface Person (){ //类扩展
  float  _weight;
}
- run();//相对私有(私有:只可在实现中访问,开放方法实现中[self   私有方法])
@end
这种写法的类别叫匿名类别,又叫类扩展,所谓的扩展,其实就是为一个类添加额外的原来没有的变量、方法或者合成属性
//不能使用@implementation Person()实现类扩展,需要在原来类@implememtation Person 中实现
   
//给NSString增加一个Number分类计算字符串中阿拉伯数字的数量
#import < Foundation/Foundation.h>
#import “NSString + Number.h”
//创建一个Number分类
//声明类方法和对象方法
@interface NSString (Number)
+ (int)numberCountOfString:(NSString *)str;
-(int)numberCount;
@end
//实现对象方法和类方法
@implementation  NSString (Number)
//对象方法
- (int)numberCount
{
  int count = 0;
//循环控制
for (int i = 0; i<self.length; i++)
{
//取出字符串中的每一个字符
   unichar c = [self characterAtIndex:i];  
//判断是否为阿拉伯数字  
if( c>=‘0’&& c<=‘9’)
{//如果是则计数器加1
   count ++;
}
}
//循环结束后返回计数器
return count;
}
//类方法
+ (int)numberCountOfString:(NSString *)str
{
      int count = 0;
   //循环控制
     for (int i = 0; i<str.length; i++)
  {   
//取出字符串中的每一个字符
     unichar c = [str characterAtIndex:i ];
//判断是否为阿拉伯数字
      if( c>=‘0’&& c<=‘9’)
     {//如果是则计数器加1
         count  ++;
      }
  }
//循环结束后返回计数器
return count;
//可以调用对象方法实现,性能更高
//return [str numberCount];
}
@end
int main()
{
int count = [NSString numberCountOfString:@“abc43456bb”];
NSLog(@“%d”,count);
int count1 = [@“abc4535klkl55” numberCount];
NSLog(@“%d”, count1);
return 0;
}

您需要登录后才可以回帖 登录 | 加入黑马