天天看點

黑馬程式員——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教育訓練、期待與您交流!