黑马程序员——IOS基础——OC面向对象六分类

------- android培训java培训、期待与您交流!

分类:可以给某一个类扩充一些方法(不修改原来类的代码)
在不改变原来类内容的基础上,可以为类增加一些方法
注意:
1.不可以扩充成员变量,只能加方法
2.在分类方法的实现中可以访问原来类中声明的成员变量
3.分类优先级最高,当调用一个方法:分类(最后参与编译的分类优先)---->原来类---->父类
4.如果多个分类扩展实现了同一个方法,则最后编译的点m文件覆盖前面的方法,被先调用。

分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法使用

方式:

//声明
@interface 类名(分类名称)
@end
//实现
@implementation 类名(分类名称)
@end


=======实例1:
//声明
Person+mj.h中:
#import "Person.h"
@interface Person (MJ)
- (void)study;
@end
//实现
Person+mj.m中:
#import "Person+mj.h"
@implementation Person (MJ)   //一般写分类模块名称
- (void)study
{
	NSLog(@"学习-------");
}
@end
//调用
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Person+mj.h"
int main()
{
	Person *p = [[Person alloc] init];
	[p test];//person中有的方法
	[p study];//在不改变person类的声明实现,当不能实现继承时,可以通过分类来添加方法
	return 0; 
}




=======实例2:为系统自带的类添加方法
//1.给NSString增加一个类方法:计算某个字符串中阿拉伯数字的个数
//2.给NSString增加一个对象方法:计算当前字符串中阿拉伯数字的个数


//声明
NSString+Number.h中
#import <Foundation/Foundation.h>
@interface NSString (Number)
+ (int)numberCountOfString:(NSString *)str;
- (int) numberCount;//自己调用
@end
//实现
@implementation NSString (Number)
+ (int)numberCountOfString:(NSString *)str
{
	int count=0;
	for(int i=0;i<str.length;i++)
	{
		unichar c=[str characterAtIndex: i];//获取str字符串内部具体某一个字符,NSUIteger就是unsigned long,即数字
		if(c>='0' && c<='9')//if(c>=48 && c<=57)
			{
				count++;
			}
	}
	return count;
//========以下代码可以完全代替以上代码========
	return [str numberCount];
}


- (int) numberCount
{
	int count=0;
	for(int i=0;i<self.length;i++)
	{
		unichar c = [self characterAtIndex:i];//去除i这个位置对应的字符
		if(c<='9' && c>='0')
		{
			count++;
		}
	}
	return count;
}
@end
//调用
#import <Foundation/Foundation.h>
#import "NSString+Number.h"
init main()
{
	int count1=[NSString numberCountOfString:@"a2134asd"];//类方法可以直接通过NSString 调用类方法
	int count2=[@"123sadf213" numberCount];
	NSlog(@"%d,%d",count1,count2);
	return 0;
}



------- android培训java培训、期待与您交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值