`
BradyZhu
  • 浏览: 248470 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Object-C中的Category

 
阅读更多

Object-C中的Category其实是一种对于类的方法的扩充,有些类似于类的继承,但是和继承还是不一样的。下面我

们通过一个例子还说明一个OC中的Category的不同。

首先是.h文件,一般的命名规范为这样NSString+ReverseString.h,具体的代码如下

//
//  NSString+ReverseString.h
//  Catagory
//
//  Created by bird on 12-10-25.
//  Copyright (c) 2012年 bird. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSString (ReverseString)

- (id) reverseString;

@end

然后是他的实现文件,具体如下

//
//  NSString+ReverseString.m
//  Catagory
//
//  Created by bird on 12-10-25.
//  Copyright (c) 2012年 bird. All rights reserved.
//

#import "NSString+ReverseString.h"

@implementation NSString (ReverseString)

- (id) reverseString
{
    //这里的self表示字符串本身,所以length表示字符串本身的长度
    NSUInteger len = [self length];
    NSMutableString *retStr  = [NSMutableString stringWithCapacity:len];
    while(len>0){
        //从后取一个字符
        unichar c = [self characterAtIndex:--len];
        NSLog(@"c is %C",c);
        NSString *s = [NSString stringWithFormat:@"%C",c];
        [retStr appendString:s];
    }
    return retStr;
}

@end

可以看到很多类的使用,然后是主文件来调用一下

//
//  main.m
//  Catagory
//
//  Created by bird on 12-10-25.
//  Copyright (c) 2012年 bird. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "NSString+ReverseString.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
            
        NSString *string = @"测试样例hello";
        NSString *retString = [string reverseString];
        NSLog(@"%@",retString);
    }
    return 0;
}

可以看出,使用Category扩展的方法有点类似于这个类本来就存在的方法,但是实际上不是这样的。
分享到:
评论

相关推荐

    Object-C的语法与Cocoa框架

    3. Object-C中的布尔类型 4. Object-C中的null 5. 与C混合编写 6. 对象的初始化 7. Object-C的description方法 8. Object-C的异常处理 9. id类型 10. 类的继承 11. 动态判定与选择器 12. 类别Category 13....

    浅析Objective-C中分类Category的使用

    无论一个类设计的如何完美,都不可避免的会遇到没有预测到的需求,那怎么扩展现有的类呢?当然,继承是个不错的选择...使用Object-C中的分类Category,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是

    iOS 面试题

    iOS 面试题: Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的...

    java棒打猪头游戏源码-20170627:一些知识点学习

    Object-c的类可以多重继承么 可以实现多个接口么 Category是什么 重写一个类的方式用继承好还是分类好 为什么 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承 Category...

    CheckCategoryConflict:自动检测项目代码、静态库等开源和非开源的项目间存在的 Category 冲突,用于避免不可预期的同名扩展

    Object-C 具有一种动态扩展技术,称之为 Category,初衷是为了将类分门别类的,根据功能、目的等进行分类,实现清晰整洁的编码风格。同时,该技术也能对现有的类进行扩展,扩展出方便快捷的函数。 然而过度的不正确...

    pandas 为什么要用 Category 类型 而不是 Str?

    之前自己的代码都是用str,或者直接就是python自己的object类型,那么我们什么时候需要用category而不是str呢? 当 这一列 的值的种类(number of unique)非常少的时候,当需要给这一列的值表示某一个顺序的时候,用...

    RuntimeDemo:Objective-C Runtime机制的示例代码

    RuntimeDemo Objective-C Runtime机制的示例代码,包含以下例子: 方法解析和消息转发 - Message和...Associated Objects : NSObject+AssociatedObject Category Method Swizzling:UIViewController+Logging Category

    wordpress通过分类别名获取分类数据:get_category_by_slug()

    【函数介绍】 get_category_by_slug() 根据分类别名获取分类...(object) 分类数据对象(boolean) 如果没找到返回FALSE 【示例】 term_id; ?&gt; 【源代码】 get_category_by_slug() 位于 wp-includes/category.php.

    Python GUI Programming Cookbook Second Edition 2nd

    While experienced in Visual Studio .NET C#, Visual Test, TestComplete, and other testing languages (such as C/C++), the main focus of the author over the past five years has been developing test ...

    java棒打猪头游戏源码-iOS-Interview:iOS-面试

    1、Object-C的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 不能够实现多继承,这里延伸出来就是C++的知识,C++是支持多重继承的 可以实现多个接口,通过...

    WPTools.v6.29.1.Pro

    * IMPORTANT: Please edit file WPINC.INC to * activate WPREPORTER, WPSPELL, wPDF, TBX * and GraphicEx / PNGImage support! * Delphi 2009 and later as inbuilt PNGImage *********************************...

    图书管理系统

    if (c.DisplayIndex &gt; index - 1) c.Visible = false; c.SortMode = DataGridViewColumnSortMode.NotSortable; } dgvBook.Columns["cUpdate"].Width = 40; dgvBook.Columns["cDelete"].Width = 40; ///设置行...

    定义UIView frame属性的UIView-Positioning

    UIView+Positioning is an Objective-C Category which provides easy shorthand methods to defining the frame properties (width, height, x, y) of any UIView based object in an easy fashion, as well as ...

    EurekaLog_7.5.0.0_Enterprise

    30)..Fixed: Leak of EurekaLog exception information object 31)..Fixed: Wrong chaining exceptions inside GetMem/FreeMem 32)..Fixed: Memory leak after low-level unhook of function 33)..Fixed: Re-...

    无限级树(Java递归)

    webContent += showCategory(Integer.parseInt(rs.getString("cid")),n,temp,countCurrent+countChild); countChild++; } webContent += "&lt;/div&gt;\n"; DB.CloseRs(rs); DB.ClosePs(ps); DB.CloseConn...

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List&lt;User&gt; , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    wordpress通过类别缩略名获取分类函数:get_category_by_path()

    【函数介绍】 按含有类别缩略名的URL检索类别。 解析$category参数以获取类别缩略名。 搜索子路径并将其返回。如果$full_match设为false,找不到匹配路径时则返回符合...(字符)(可选)常量OBJECT,ARRAY_A, 或 ARRAY

    一个适合新手学习的电商项目

    3、登录时判断cookie中有购物车商品,应该吧cookie中的购物车商品列表转移到redis中。 Key:用户id Value:购物车商品列表 4、如果想redis中转移商品时,redis的购物车中已经有商品,此时,需要把商品合并。如果...

    BCGControlBarPro.v12.00

    2、已经对 BCGPAppWizard2005 中的向导进行汉化,在 Visual Studio 2008(2010) 中可使用中文向导 BCGPAppWizard (参考 Visual Studio 2008 原有的中文向导,如果您想学习汉化向导,参考目录是:C:\Program Files\...

    数位板压力测试

    Information Category 63 B.5. Cursor Mask 63 CSRMASK Programming 64 Information Category 64 B.6. Extended Button Masks 64 XBTNMASK Programming 64 Information Category 65 VERSION 1.1 UPDATE NOTATION ...

Global site tag (gtag.js) - Google Analytics