您的位置:首页 > 职场人生

黑马程序员——ios学习笔记 OC 分类

2015-08-12 01:16 525 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

分类

当为一个类扩展其他功能时,可以考虑继承这个类进行实现,但是这样一来使用时就必须定义成新实现的子类才能拥有扩展的新功能。为了在不改变原有类的情况下扩展新功能又可以在使用时不必定义新类型,可以在OC中利用分类Category实现。

// LOL.h

#import <Foundation/Foundation.h>

@interface LOL : NSObject
@property(nonatomic,copy)NSString* name;
-(void)run;
@end

// LOL.m

#import "LOL.h"

@implementation LOL
-(void)run{
NSLog(@"正在撸啊撸!");
}
@end

// LOL+dema.h

#import "LOL.h" //声明LOL的分类dema

@interface LOL (dema)
-(void)test; //并添加test方法
@end

// LOL+dema.m

#import "LOL+dema.h"

@implementation LOL (dema)
-(void)test{ //实现test方法
NSLog(@"%@会转圈!",self.name);
}
@end

// NSString+count.h

#import <Foundation/Foundation.h>

@interface NSString (count) //声明非正式协议(即NSString的分类)
-(int)count:(char)c;
@end

// NSString+count.m

#import "NSString+count.h"

@implementation NSString (count) //实现非正式协议(即NSString的分类)
-(int)count:(char)c{
int count = 0;
for (int i = 0; i < self.length; i++) {
if([self characterAtIndex:i] == c){ //遍历整个字符串,当有相同字符时,count加1
count++;
}
}
return count;
}
@end

// main.m

#import <Foundation/Foundation.h>
#import "LOL.h"
#import "LOL+dema.h"
#import "NSString+count.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
LOL *lol = [LOL new]; //给LOL创建一个新的对象
[lol run] ; //执行LOL中自己有的run方法
lol.name = @"德玛";
[lol test]; //执行LOL原本没有而是从dama分类中添加的test方法
NSString * str = @"abcdbca";
NSLog(@"%@中有%d个b",str,[str count:'b']);//调用非正式协议(即NSString的分类)中添加的count方法
}
return 0;
}


总结:

非正式协议就是NSObject与foundation框架的分类。

延展也属于分类,其为分类名为空的匿名分类,只有.h文件,可以添加实例变量但不能实现方法。

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: