黑马程序员技术交流社区
标题:
OC语言的分类
[打印本页]
作者:
chenhuan_ccit
时间:
2014-11-1 20:51
标题:
OC语言的分类
在开发项目的过程中,有时候需要为已有的类扩展一些新方法,这个时候最好的方法就是分类。
1 分类
分类的语法格式为:
1、分类的声明:
@interface 类名 (分类名称)
// 方法声明
@end
2、分类的实现:
@implementation 类名 (分类名称)
// 方法实现
@end
在声明部分,分类只能增加方法,不能增加成员变量;分类方法实现中可以访问主类中声明的成员变量。
@interface Person : NSObject
{
int _age;
}
@property int age;
- (void)test;
@end
//Person.m
@implementation Person
- (void)test
{
NSLog(@"Person-test");
}
@end
//Persn的分类,Person+JJ.h
@interface Person (JJ)
- (void)test2;
@end
//Persn的分类,Person+JJ.m
@implementation Person (JJ)
- (void)test2 //实现分类中声明的方法
{
_age = 10; //访问主类的成员变量
NSLog(@"-----test2,age=%d",_age);
}
- (void)test //分类中重新实现主类中的test方法,将会覆盖主类中的test方法,导致主类的方法无法使用
{
NSLog(@"Person (JJ)-test");
}
@end
复制代码
如上文的程序所示,分类中重新重新实现主类中的test方法,将会覆盖主类中的test方法,更特别的时,如果多个分类都重新实现了主类的某一个方法,则该方法將由最后参与编译的分类调用。即方法调用的优先级:分类(最后参与编译的分类优先) --> 原来类(主类) --> 父类。
2 分类的应用
分类的应用,给NSString增加一个类方法:计算某个字符串中阿拉伯数字的个数; 给NSString增加一个对象方法:计算当前字符串中阿拉伯数字的个数。
// main方法
#import <Foundation/Foundation.h>
#import "NSString+Number.h"
int main(int argc, const char * argv[])
{
//int count = [NSString numberCountOfString:@"2145aaaa52"];
int count = [@"2145aaaa52" numberCount];
NSLog(@"%d",count);
return 0;
}
// NSString+Number.h
#import <Foundation/Foundation.h>
@interface NSString (Number)
+ (int)numberCountOfString:(NSString *)str;
- (int)numberCount;
@end
// NSString+Number.m
#import "NSString+Number.h"
@implementation NSString (Number)
+ (int)numberCountOfString:(NSString *)str
{
// int count = 0;
//
// for (NSInteger i = 0; i < [str length]; i++) {
// unichar c = [str characterAtIndex:1];
// if ( c>='0' && c<='9') {
// count++;
// }
// }
// return count;
return [str numberCount];
}
- (int)numberCount
{
int count = 0;
for (NSInteger i = 0; i < [self length]; i++) {
unichar c = [self characterAtIndex:1];
if ( c>='0' && c<='9') {
count++;
}
}
return count;
}
@end
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2