`
zsjg13
  • 浏览: 144579 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

1.8 用一个Category来扩展一个类

    博客分类:
  • ios
 
阅读更多

1、问题

你想要给一个类添加方法和行为,但你不想从头创建一个全新的子类。

 

2、解决方案

在Objective-C中,你可以用categories来定义和实现properties和methods,之后它们可以被附到一个类上。要完成这件事,你需要有2个文件:一个头文件列出接口、一个实现文件列出实现。当category搞好了,就可以导入该category头文件;任何将该category赋予其之上的类将会拥有这些properties和methods。

 

4、原理

你需要的第1个东西就是头文件。就说,你要扩展NSString类,加一些方法帮助你创建HTML文本。

 

下面是一个category头文件,里面有一个接口,代码如下:

@interface NSString (HTMLTags)

上面的NSString就是你要扩展的类。这意味着该category可能只会被运用到NSString(或NSString的子类)。在类名后面圆括号中的是给category的名字。

 

该category的properties和methods都要放在interface的后面,@end的前面。

 

实现:

@implementation NSString (HTMLTags)

 

5、代码

Listing 1-13. HTMLTags.h 

#import <Foundation/Foundation.h> 

@interface NSString (HTMLTags) 

-(NSString *) encloseWithParagraphTags; 

@end

==========================================

Listing 1-14. HTMLTags.m 

#import "HTMLTags.h" 

@implementation NSString (HTMLTags) 

-(NSString *) encloseWithParagraphTags{ 

        return [NSString stringWithFormat:@"<p>%@</p>",self]; 

@end

===========================================

Listing 1-15. main.m 

#import "HTMLTags.h" 

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

        @autoreleasepool { 

                NSString *webText = @"This is the first line of my blog post"; 

 

                //Print out the string like normal: 

                NSLog(@"%@", webText); 

 

                //Print out the string using the category function: 

                NSLog(@"%@", [webText encloseWithParagraphTags]); 

        } 

        return 0; 

 

6、使用

Categories通常用在这些情形下:你想避免创建一个复杂的继承层次。Categories also help your code remain readable.例如,你想要在项目中用一个category来扩展NSString,你的大多数代码对于使用过NSString的其他人来说都是熟悉的。假如写一个NSString的子类,例如NSHTMLString,就可能会导致困惑。

分享到:
评论

相关推荐

    ASP源码—瓜果蔬菜批发网 v1.8.zip

    总的来说,ASP源码—瓜果蔬菜批发网 v1.8.zip是一个涉及ASP编程、数据库管理、用户体验设计等多个IT领域的项目,它为搭建一个完整的线上批发平台提供了基础框架和功能模块。开发者或网站所有者可以根据自己的需求对...

    易企yiqicms1.8/phpCMS/php伪静态企业网站程序

    总的来说,易企yiqicms1.8/phpCMS/php伪静态企业网站程序是一个全面且功能强大的内容管理系统,它的伪静态特性有助于SEO,丰富的功能模块满足了企业网站的各种需求,无论是内容发布、产品展示还是用户互动,都能得到...

    SMW quick reference

    本文档是一个快速参考,主要覆盖MediaWiki 1.19版本及其扩展,包括Parser Functions 1.4、Semantic MediaWiki 1.8、Semantic Result Formats 1.8、Semantic Maps 2.0、Semantic Internal Objects 0.6、Semantic ...

    uTorrent v1.8.3.15358 Beta/v1.9 build 14981 Beta 多国语言版

    支持多任务同时下载,支持设置文件下载优先级,可以根据计划任务调整占用的带宽,全局/单个任务的速度限制,快速断点续传机制,支持 UPnP 和 NAT-PMP,支持流行的 BT 扩展协议,支持用户来源交换,支持 DHT 网络,...

    osgi实战读书笔记

    - **Bundle-Activator**: 指定一个特定的类作为激活器(Activator),当Bundle被激活时,该类会被框架调用以初始化Bundle。例如: ``` Bundle-Activator: org.riawork.demo.Activator ``` - **Bundle-Category**:...

    bugzilla使用说明

    Testopia作为Bugzilla的一个扩展组件,主要用于跟踪产品测试的过程和结果。它不仅支持传统的Bug追踪,还提供了更为全面的测试管理功能。 **2.2 Testopia的核心概念** - **TestPlans**:测试计划是最顶层的概念,...

    Javaweb项目.docx

    该项目旨在通过JavaWeb技术构建一个高效且易于使用的图书管理系统。系统的目标是利用计算机自动处理图书馆中的各种信息,包括图书资料、用户借阅记录等,以此提升图书馆的管理效率和服务质量。 #### 二、系统功能...

    SIM7600与7100硬件差异

    - **引脚35**:在SIM7600C中,该引脚被定义为`HSIC_STROBE(保留)`,而在SIM7100C中则被用作一个通用输入输出(GPIO)。 - **引脚36**:同样地,在SIM7600C中,该引脚被标记为`HSIC_DATA(保留)`,但在SIM7100C中也被...

    magento-set-page-size:此模块用于设置特定类别的页面大小

    它使用事件观察器来使其工作。 技术支持 我在magento 1.8版中测试了此功能。 但很可能它将与其他版本一起使用 安装 下载此zip文件。 解压缩。 将其粘贴到您的Magento应用程序目录。 大功告成 理论 您是否想知道此...

    ECSHOP设置及开发技巧汇总

    后台管理界面上可能会出现提示信息,如“未授权”等,可以通过编辑后台管理界面的相关文件(如`admin/index.php`)来移除这类提示。 ##### 1.6 发布站内新闻 发布站内新闻有助于提升用户的参与度。在ECShop后台,...

    STL源码剖析.pdg

    2.1.1 设计一个简单的空间配置器,jj::allocator 044 2.2 具备次配置力(sub-allocation)的sgi 空间配置器 047 2.2.1 sgi 标准的空间配置器,std::allocator 047 2.2.2 sgi 特殊的空间配置器,std::alloc 049 ...

    STL 源码剖析(侯捷先生译著)

    2.1.1 设计一个简单的空间配置器,JJ::allocator 044 2.2 具备次配置力(sub-allocation)的SGI 空间配置器 047 2.2.1 SGI 标准的空间配置器,std::allocator 047 2.2.2 SGI 特殊的空间配置器,std::alloc 049 ...

Global site tag (gtag.js) - Google Analytics