iOS设计模式——Category

来源:未知 责任编辑:责任编辑 发表时间:2013-12-01 14:19 点击:
什么是Category
Category模式用于向已经存在的类添加方法从而达到扩展已有类的目的,在很多情形下Category也是比创建子类更优的选择。新添加的方法同样也会被被扩展的类的所有子类自动继承。当知道已有类中某个方法有BUG,但是这个类是以库的形式存在的,我们无法直接修改源代码的时候,Category也可以用于替代这个已有类中某个方法的实体,从而达到修复BUG的目的。然而却没有什么便捷的途径可以去调用已有类中原有的那个被替换掉方法实体了。需要注意的是,当准备有Category来替换某一个方法的时候,一定要保证实现原来方法的所有功能,否则这种替代就是没有意义而且会引起新的BUG。和子类不同的是,Category不能用于向被扩展类添加实例变量。Category通常作为一种组织框架代码的工具来使用。
 
Category的用途
1.      在不创建继承类的情况下实现对已有类的扩展。
 
2.      简化类的开发工作(当一个类需要多个程序员协同开发的时候,Category可以将同一个类根据用途分别放在不同的源文件中,从而便于程序员独立开发相应的方法集合)。
 
3.      将常用的相关的方法分组。
 
4.      在没有源代码的情况下可以用来修复BUG。
 
Category的用法
在Obj-C中,声明某一个已有类的Category扩展的方法如下:
 
[html]  
@interface ClassName (CategoryName)  
-methodName1  
-methodName2  
@end  
上面的声明通常是在.h文件中,然后我们在.m文件中实现这些方法:
 
[html] 
@implementation ClassName (CategoryName)  
-methodName1  
-methodName2  
@end  
 
我们创建一个iOS Single View Applciation名为CategoryExample。然后为创建一个NSString类的category扩展。File->New->File然后选择 Cocoa Touch Objective-C category.命名为ReverseNSString.系统会自动生成一个固定格式ClassName+CategoryName的.h和.m文件。
 
声明Category
 
打开NSString+ReverseNSString.h文件,在里面添加如下代码:
 
[html] 
#import <Foundation/Foundation.h>  
@interface NSString (ReverseNSString)  
+ (NSString*) reverseString:(NSString*)strSrc;  
@end  
实现Category
 
NSString+ReverseNSString.m文件中实现reverseString方法:
 
[html] 
#import"NSString+ReverseNSString.h"  
@implementationNSString (ReverseNSString)  
+ (NSString*)reverseString:(NSString*)strSrc;  
{  
    NSMutableString *reversedString =[[NSMutableString alloc]init];  
    NSInteger charIndex = [strSrc length];  
    while (charIndex > 0) {  
        charIndex--;  
        NSRange subStrRange =NSMakeRange(charIndex, 1);  
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Lexical or Preprocessor Issue 'xxx.h
  • ios学习笔记(二)xcode 4.3.2下实现基本交互
  • ios版本的helloworld
  • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
  • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
  • IOS类似iphone通讯录TableView的完整demo【附源码】
  • UITableView一些方法
  • [iPhone中级]iPhone团购信息客户端的开发 (二)
  • 如何为Iphone应用创建启动界面
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1