天天看点

Objective-C-Category类别

Object-C开发的时候有的时候会用到Category类,类似于Java和C#中扩展类,就是如果你觉得如果你觉得常用的方法在String中没有,可以根据业务需求和个人喜好写一个扩展类,然后在其中补充自己的方法,如果单纯的扩展已有类型来看基本上是一样的。OC还有可以对已经存在类通过Category进行扩展,这个特点又和C#中的partial class有的类似,先来看下是如何操作的吧:

Objective-C-Category类别

新建的时候选择Object-C File:

Objective-C-Category类别

选择类型为Category,第一个是是Categroy名称,第三个类选择可以是知己新建的类,也可以是系统本身的类,本次选的个人新建的:

Objective-C-Category类别

这个时候生成文件如下:

Objective-C-Category类别

写了几行代码,Book+FlyElephant.h代码:

1

2

3

4

5

6

7

<code>#import "Book.h"</code>

<code>@interface</code> <code>Book (FlyElephant)</code>

<code>- (</code><code>void</code><code>)detialMore:(</code><code>NSString</code><code>*)author;</code>

<code>@end</code>

  Book+FlyElephant.m中的代码:

8

9

10

<code>#import "Book+FlyElephant.h"</code>

<code>@implementation</code> <code>Book (FlyElephant)</code>

<code>- (</code><code>void</code><code>)detialMore:(</code><code>NSString</code><code>*)author</code>

<code>{</code>

<code>    </code><code>NSLog</code><code>(@</code><code>"分类中可以获取更多的详细信息%@"</code><code>,author);</code>

<code>}</code>

  具体调用代码:

<code>Book *book=[Book </code><code>new</code><code>];</code>

<code>    </code><code>[book detialMore:@</code><code>"keso"</code><code>];</code>

 以上的实现比较简单,上面有一个关于NSString的Categroy类的,跟Book创建差不多,实现了一个方法就是如果字符串超过一定的长度,返回特定值:

NSString+StrExtend.h中的代码:

<code>#import &lt;Foundation/Foundation.h&gt;</code>

<code>@interface</code> <code>NSString</code> <code>(StrExtend)</code>

<code>+(</code><code>NSString</code> <code>*)subStr:(</code><code>NSString</code> <code>*)originalStr;</code>

<code>- (</code><code>NSString</code> <code>*)subStr2;</code>

NSString+StrExtend.m中的代码:

11

12

13

14

<code>#import "NSString+StrExtend.h"</code>

<code>@implementation</code> <code>NSString</code> <code>(StrExtend)</code>

<code>+ (</code><code>NSString</code> <code>*)subStr:(</code><code>NSString</code> <code>*)originalStr</code>

<code>    </code><code>return</code> <code>[originalStr length]&lt;10?@</code><code>"长度不够,请重新输入"</code><code>:[originalStr substringWithRange:(</code><code>NSMakeRange</code><code>(0, 10))];</code>

<code>- (</code><code>NSString</code> <code>*)subStr2</code>

<code>    </code><code>return</code>  <code>self</code><code>.length&lt;10?@</code><code>"长度不够,请重新输入"</code><code>:[</code><code>self</code> <code>substringWithRange:(</code><code>NSMakeRange</code><code>(0, 10))];</code>

  具体的调用:

<code>NSLog</code><code>(@</code><code>"%@"</code><code>,[</code><code>NSString</code> <code>subStr:@</code><code>"气若兰兮长不改,心若兰兮终不移"</code><code>]);</code>

<code> </code><code>NSString</code> <code>*str=[@</code><code>"气若兰兮长不改,心若兰兮终不移"</code> <code>subStr2];</code>

<code> </code><code>NSLog</code><code>(@</code><code>"%@"</code><code>,str);</code>

  第一个是静态方法也就是类方法调用需要NSString调用,第二个是动态方法也就是对象方法,调用稍微简单点,其他的应该都很容易理解~如有不当,多多指正~

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4215696.html,如需转载请自行联系原作者