黑马程序员——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文件,可以添加实例变量但不能实现方法。
分类
当为一个类扩展其他功能时,可以考虑继承这个类进行实现,但是这样一来使用时就必须定义成新实现的子类才能拥有扩展的新功能。为了在不改变原有类的情况下扩展新功能又可以在使用时不必定义新类型,可以在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文件,可以添加实例变量但不能实现方法。
相关文章推荐
- 黑马程序员——ios学习笔记 OC 协议&Block
- 送上一篇应付Java 面试的秘籍(Java 初级)
- 黑马程序员——包、权限修饰符、内部类
- 黑马程序员
- 为什么程序员的业余项目大多都死了?
- 红杏: 为学者、程序员、外贸工作者打造的上网加速器,专治各种网站打不开和打开慢,而且,更棒的是,红杏
- 黑马程序员——面向对象(下)— 重写、多态、抽象、接口
- 黑马程序员
- 如果牛顿是程序员,那么?
- 黑马程序员——面向对象(上)— 类、对象、封装、继承、构造方法
- 黑马程序员--java基础学习笔记8
- 黑马程序员——Java基础---异常,IO流,File类
- 面试题
- 黑马程序员——Java基础---面向对象
- 黑马程序员——Java基础---继承,抽象,多态,接口,包,内部类
- 黑马程序员
- 黑马程序员——Java基础---集合
- 黑马程序员——高新技术---反射
- 黑马程序员
- 黑马程序员——Java基础---方法与数组操作