iOS设计模式——Category简单介绍

 更新时间:2016年11月21日 10:57:18   作者:老A四十二号  
这篇文章主要介绍了iOS设计模式——Category简单介绍,有兴趣学习的同学可以了解一下。

 什么是Category

Category模式用于向已经存在的类添加方法从而达到扩展已有类的目的,在很多情形下Category也是比创建子类更优的选择。新添加的方法同样也会被被扩展的类的所有子类自动继承。当知道已有类中某个方法有BUG,但是这个类是以库的形式存在的,我们无法直接修改源代码的时候,Category也可以用于替代这个已有类中某个方法的实体,从而达到修复BUG的目的。然而却没有什么便捷的途径可以去调用已有类中原有的那个被替换掉方法实体了。需要注意的是,当准备有Category来替换某一个方法的时候,一定要保证实现原来方法的所有功能,否则这种替代就是没有意义而且会引起新的BUG。和子类不同的是,Category不能用于向被扩展类添加实例变量。Category通常作为一种组织框架代码的工具来使用。

Category的用途

1.在不创建继承类的情况下实现对已有类的扩展。

2. 简化类的开发工作(当一个类需要多个程序员协同开发的时候,Category可以将同一个类根据用途分别放在不同的源文件中,从而便于程序员独立开发相应的方法集合)。

3. 将常用的相关的方法分组。

4.在没有源代码的情况下可以用来修复BUG。

Category的用法

在Obj-C中,声明某一个已有类的Category扩展的方法如下:

@interface ClassName (CategoryName) 
-methodName1 
-methodName2 
@end 

上面的声明通常是在h文件中,然后我们在m文件中实现这些方法:

@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文件,在里面添加如下代码:

#import <Foundation/Foundation.h> 
@interface NSString (ReverseNSString) 
+ (NSString*) reverseString:(NSString*)strSrc; 
@end 

实现Category

NSString+ReverseNSString.m文件中实现reverseString方法:

#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); 
    [reversedString appendString:[strSrcsubstringWithRange:subStrRange]]; 
  } 
  return reversedString; 
} 
@end 

剩下的工作就是验证我们的Category了,在view中添加一个按钮ReverseString,并设置相应的action方法为reverseString.在view上再添加一个label,命名为myString,默认值是”HelloCategory Design Pattern!”。点击按钮反转这个字符串。主要代码如下:

-(IBAction)reverseString:(id)sender { 
  NSString *test = [NSStringreverseString:_myString.text]; 
  _myString.text = test;   
} 

代码组织

Category用于大型类有效分解。通常一个大型类的方法可以根据某种逻辑或是相关性分解为不同的组,一个类的代码量越大,将这个类分解到不同的文件中就显得越有用,每个文件中分别是这个类的某些相关方法的集合。

当有多个开发者共同完成一个项目时,每个人所承担的是单独的cagegory的开发和维护。这样就版本控制就更加简单了,因为开发人员之间的工作冲突更少了。

Category VS添加子类

并没有什么界限分明的判定标准来作为何时用Category何时用添加子类的方法的指导。但是有以下几个指导性的建议:

1.如果需要添加一个新的变量,则需添加子类。

2.如果只是添加一个新的方法,用Category是比较好的选择。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 支付宝支付开发IOS图文教程案例

    支付宝支付开发IOS图文教程案例

    这篇文章主要介绍了支付宝支付开发IOS案例的相关资料,需要的朋友可以参考下
    2016-04-04
  • iOS应用开发中监听键盘事件的代码实例小结

    iOS应用开发中监听键盘事件的代码实例小结

    这篇文章主要介绍了iOS应用开发中监听键盘事件的代码实例小结,呼出键盘等操作为iOS App中的必备功能,示例代码为传统的Objective-C,需要的朋友可以参考下
    2016-03-03
  • iOS从App跳转至系统设置菜单各功能项的编写方法讲解

    iOS从App跳转至系统设置菜单各功能项的编写方法讲解

    这篇文章主要介绍了iOS从App跳转至系统设置菜单各功能项的编写方法讲解,示例代码为传统的Objective-C,需要的朋友可以参考下
    2016-04-04
  • IOS使用UICollectionView实现无限轮播效果

    IOS使用UICollectionView实现无限轮播效果

    这篇文章主要为大家详细介绍了IOS使用UICollectionView实现无限轮播效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • iOS中最全的各种定时器使用教程

    iOS中最全的各种定时器使用教程

    这篇文章主要给大家介绍了关于iOS中最全的各种定时器的使用教程,文中通过示例代码介绍的非常详细,通过文中介绍的最全的定时器相信会对各位iOS开发者们带来一定的帮助,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • iOS开发之通过银行卡号获取所属银行名称

    iOS开发之通过银行卡号获取所属银行名称

    本文给大家分享一段代码关于ios通过银行卡号获取所属银行名称,代码简单易懂,在项目开发中经常会遇到这样的功能,需要的朋友一起学习吧
    2016-11-11
  • iOS应用中使用AsyncSocket库处理Socket通信的用法讲解

    iOS应用中使用AsyncSocket库处理Socket通信的用法讲解

    这篇文章主要介绍了iOS应用中使用AsyncSocket库处理Socket通信的用法讲解,AsyncSocket同时支持TCP和UDP,文中展示了其建立断开连接及发送接收消息的操作,very好用,需要的朋友可以参考下
    2016-05-05
  • 针对iOS开发的一些Xcode使用技巧小结

    针对iOS开发的一些Xcode使用技巧小结

    这篇文章主要介绍了针对iOS开发的一些Xcode使用技巧小结,Xcode是Mac上编写iOS应用的开发环境,需要的朋友可以参考下
    2015-12-12
  • iOS应用开发中SQLite的初步配置指南

    iOS应用开发中SQLite的初步配置指南

    这篇文章主要介绍了iOS应用开发中SQLite的初步配置指南,SQLite是一个极轻量级可作嵌入式的数据库,非常适合入门开发者使用,需要的朋友可以参考下
    2015-12-12
  • iOS实现列表与网格两种视图的相互切换

    iOS实现列表与网格两种视图的相互切换

    相信大家应该也都发现了,在现在很多的电商app中,都会有列表视图和网格两种视图的相互切换。例如京东和淘宝。这样更利于提高用户的体验度,所以这篇文章小编就是大家分享下利用iOS实现列表与网格两种视图相互切换的方法,文中介绍的很详细,感兴趣的下面来一起看看吧。
    2016-10-10

最新评论