黑马程序员_分类



黑马程序员_分类

分类:可以给某一个类扩充一些方法(不修改原来类的代码)
分类一般以模块命名

好处:
1.一个庞大的类可以分模块开发
2.一个庞大的类可以由多个人来编写,更有利于团队合作

注意:
1.Category可以访问原始类的实例变量,但不能添加变量,只能添加方法,如果想添加变量,可以考虑通过继承创建子类。
2.Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法。
3.多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效。

格式:
// 声明
@interface 类名(分类名称) 
// 分类不能增加成员变量
@end

// 实现
@implementation 类名(分类名称)

@end

/**
 * 分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法。
 *
 * 使用注意:
 * 1.分类只能增加方法,不能增加成员变量。
 * 2.分类方法实现中可以访问原来类中声明的成员变量。
 * 3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用。(在开发中不建议分类中实现以前的方法)
 * 4.方法调用的优先级:分类(最后参与编译的分类优先) ---> 原来类 ---> 父类
 */

#import <Foundation/Foundation.h>

/**************** Person ****************/

@interface Person : NSObject
{
	int _age;
}
@property int age;

- (void)test;

@end

@implementation Person

- (void)test
{
	NSLog (@"Person --- test");
}

@end

/**************** Person(Cat1) ****************/
@interface Person (Cat1)

- (void)study;

@end

@implementation Person (Cat1)

- (void)study
{
	NSLog (@"Person (Cat1) --- study: %d", _age);
}

- (void)test
{
	NSLog (@"Person (Cat1) --- test");
}

@end

/**************** Person(Cat2) ****************/
@interface Person (Cat2)

@end

@implementation Person (Cat2)

- (void)test
{
	NSLog (@"Person (Cat2) --- test");
}

@end

/**************** main ****************/

int main()
{
	Person *p = [[Person alloc] init];

	p.age = 10;

	// 优先去分类中查找,然后再去原来类中找,最后再去父类中找。
	[p test];

	[p study];

	return 0;
}

/**
 * 1.给NSString增加一个类方法,计算某个字符串中阿拉伯数字的个数
 * 2.给NSString增加一个对象方法,计算某个字符串中阿拉伯数字的个数
 */

#import <Foundation/Foundation.h>

/**************** NSString (Number) ****************/
@interface NSString (number)

/**************** 给NSString增加类方法 ****************/
+ (int)numberCountOfString: (NSString *)str;

/**************** 给NSString增加对象方法 ****************/
- (int)numberCount;

@end

@implementation NSString (Number)

+ (int)numberCountOfString: (NSString *)str
{
	/*
	// 1.定义变量计算数字的个数
	int count = 0;

	for (int i = 0; i < str.length; i++)
	{
		unichar c = [str characterAtIndex:i];

		if ( c >= '0' && c <= '9' )
		{
			count++;
		}
	}
	*/

	// return count;
	return [str numberCount];
}

- (int)numberCount
{
	int count = 0;
	
	for ( int i = 0; i < self.length; i++ )
	{
		// 取出i这个位置对应的字符
		unichar c = [self characterAtIndex:i];

		// 如果这个字符是阿拉伯数字就加一
		if ( c >= '0' && c <= '9' )
		{
			count++;
		}
	}

	return count;
}

@end

/**************** main ****************/
int main()
{
	// int count = [NSString numberCountOfString: @"123456abcdef"];

	int count = [@"123456abcdef" numberCount];

	NSLog (@"%d", count);
	
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值