2016年8月16日星期二17:26
Catgory 分類
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Person+Play.h"
int main(int argc, const char * argv[]) {
@autoreleasepool{
/*
分類的聲明
@interface ClassName(CatgoryName)
NewMethod;在類別中添加方法
不允許在類別中添加變量
@end
@implementation ClassName(CatgoryName)
NewMethod
@end
ClassName:需要給哪個類擴充方法
CategoryName:分類的名稱
NewMethod:擴充的方法
*/
Person *p = [[Person alloc]init];
p.age = 23;
[p playground];
}
return 0;
}
分類注意點
1.分類是用于給原有類添加方法的懂更,它只能添加方法,不能添加屬性(成員變量)
2.分類中的@property攀涵,只會生成setter/getter方法的聲明吭狡,不會生成實現(xiàn)以及私有的成員變量
3.可以在分類中訪問原有類中.h的屬性
4.如果分類中有和原有類同名的方法,會調(diào)用分類中的方法
5.如果多個分類中都有和原有類中同名的方法攘宙,那么調(diào)用該方法的由編譯器決定
練習
#import <Foundation/Foundation.h>
#import "NSString+XC.h"
int main(int argc, const char * argv[]) {
@autoreleasepool{
NSString *str = @"asdas123456789";
int count = [str count];
NSLog(@"count = %i",count);
}
NSString *str1 = @"asdas123456789";
int count1 = [NSString countWithStr:str1];
NSLog(@"count = %i",count1);
return 0;
}
#import <Foundation/Foundation.h>
@interface NSString
(XC)
+(int)countWithStr:(NSString*)str;
-(int)count;
@end
#import "NSString+XC.h"
@implementation
NSString (XC)
+(int)countWithStr:(NSString*)str
{
intcount = 0;
for(inti = 0; i<str.length; ++i) {
//取出字符串中的數(shù)字索引
unichar c = [str
characterAtIndex:i];
if (c >= '0' && c <='9') {
count++;
}
}
returncount;
}
-(int)count
{
intcount = 0;
//在這個方法里self代表的是誰調(diào)用了這個方法屯耸,在main里用調(diào)用的str所以self就代表str
for(inti = 0; i<self.length; ++i) {
unichar c = [self characterAtIndex:i];
if (c >= '0' && c <='9') {
count++;
}
}
returncount;
}
@end