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

用Category来扩展一个类

 
阅读更多

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

 

在Objective-C中,可以用categories来定义并实现属性和方法,之后再将它们附加到一个类上。

 

假设你想要扩展NSString类,给它加一些方法来帮助你创建HTML文本。那么这个category头文件就会看起来像这样:

@interface NSString (HTMLTags)

在@interface关键字后的类名就是正要扩展的类。这意味着此category可能只能被运用到NSString或NSString的子类。类名后的括号中的HTMLTags就是category的名字。

 

The implementation follows a similar pattern.

@implementation NSString (HTMLTags)

 

以后要用时,导入category的头文件就可以了。

 

The Code
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;
}

 

分享到:
评论

相关推荐

    iOS Category基类扩展源码

    iOS Category基类扩展是iOS开发中的一个重要概念,它允许开发者为已有的Objective-C类添加新的方法,而无需创建子类。Category在很多场景下都极其有用,比如为系统类添加便利方法、分类代码、实现单例模式等。下面将...

    iOS常用的Category分类

    在iOS开发中,Category是一种强大的工具,它允许我们为已有的Objective-C类添加新的方法,而无需继承。Category经常被用来扩展系统类的功能,或者为代码组织提供便利。以下是对iOS常用Category分类的详细说明: 1. ...

    CategoryTest Demo代码

    在这个Demo中,开发者可能展示了如何创建并使用自定义的Category来增强一个类别。 首先,创建Category通常需要两个步骤:定义Category接口和实现Category。接口定义是在`.h`文件中,例如`MyClass+MyExtension.h`,...

    category练习代码

    Category是Objective-C中的一个重要特性,它允许我们向已有的类添加方法,而无需继承。Category在iOS开发中被广泛用于扩展系统类的功能,或者对已有代码进行模块化处理。在这个"category练习代码"中,我们可以看到...

    iOS 中Category用法

    Objective-C提供了一种特别的方式来扩展类,叫Catagory,可以动态的为已经存在的类添加新的行为。这样可以保证类的原原来的基础上,较小的改动就可以增加需要的功能。使用Category对类进行扩展时,不需要访问其源...

    ios 类的扩展

    在Objective-C中,类扩展通常通过创建一个类别来实现。类别定义以`@interface`开始,后面跟着类名和类别名,如: ```objc @interface MyClass (MyCategory) @property (nonatomic, readonly) NSString *...

    swift-一个UITextField类的category可以一行代码实现对UITextField字数的限制

    具体实现时,我们可以在扩展中定义一个计算属性或方法,例如`maxCharacterCount`,来设置或获取输入的最大字符数。同时,我们可以监听`UITextField`的`textDidChange`通知,每当用户输入时,检查当前文本的长度,...

    Objective-c Category和Protocol

    - **避免源代码污染**:当多个框架需要使用同一个类时,可以通过定义不同的Category来避免方法名冲突。 - **实现多态**:Category可以用来实现多态行为,通过不同的Category实现相同的方法名称,但具有不同的实现...

    Category类库:php无限分类类库

    Category类库的核心是一个PHP类,该类包含了一系列方法,用于创建、查询、遍历和管理分类。它可能包括以下功能: - `addCategory()`: 添加新的分类,包括父分类信息。 - `getCategories()`: 获取所有分类,可以...

    swift-功能丰富的Category类型工具库

    总之,"swift-功能丰富的Category类型工具库"是Swift开发的一个强大辅助工具,它通过扩展系统类和自定义类,提供了丰富的实用方法,有助于提高代码质量和开发效率。开发者可以按需导入这些扩展,使得代码更加模块化...

    RCP 常见的扩展点指南

    然后,在插件中创建一个名为 SamplePerspective 的类,实现 IPerspectiveFactory 接口的 createInitialLayout 方法。 在 Eclipse 中,透视图可以通过“窗口→打开透视图→其他”选项来打开。在打开透视图后,可以...

    iOS常用category

    4. **Category与方法冲突**:如果多个Category为同一个类添加了相同名称的方法,编译时会产生冲突。为了避免冲突,可以使用`+load`方法或Category的Category。 5. **Category与Category的关联**:Category可以引用...

    wanphp-component-category:分类扩展

    因此,“wanphp-plugin-category”可以看作是一个用于添加或强化网站分类管理功能的插件。它可以无缝集成到wanphp框架中,提供对分类的高效处理和展示。 该组件的核心功能可能包括: 1. **分类创建**:允许用户...

    Category类库:php无限分类类库.zip

    Category类库是PHP编程中一个专门用于处理无限分类的工具,它可以帮助开发者高效地管理和组织具有层级关系的数据。无限分类在网站的很多场景下都非常常见,例如产品分类、文章分类、菜单导航等,这些都需要能够无限...

    Category VS Extension 原理详解

    具有多个开发者共同完成一个类、可以减少单个文件的体积、可以把不同的功能组织到不同的 Category 里、可以由多个开发者共同完成一个类、可以按需加载想要的 Category 等优点。 Category 的特点包括: * Category ...

    UINavigationBar Category

    在Category中,我们可以定义一个新的方法来替换或扩展原始的`- (void)layoutSubviews`方法。这个方法负责布局barButtonItem,确保其点击区域正确。 ```objc // UINavigationBar+CustomLayout.h #import @...

    Objective-C的Category与关联对象实现原理 - iOS知识库1

    例如,在开发过程中,我们可以使用Category来扩展 UIKit 中的类,例如扩展 UITextField 的功能以实现自定义的输入框。同时,我们也可以使用关联对象来将对象与其他对象关联起来,例如将一个图片与一个ImageView关联...

    PHP分享一个功能强大的yii框架的分类树扩展

    这个分享的扩展是针对Yii框架的一个增强,提供更便捷的方式来管理和展示分类树。 首先,我们要理解什么是分类树。分类树是一种树形结构,每个节点代表一个分类,可以有零个或多个子节点。在Web应用中,用户可以通过...

    swift-UtilityFunction常用工具类方法扩展视图等

    例如,我们可以为String类型扩展一个方法来检查是否包含某个子串,或者为UIView扩展一个方法来便捷地设置边框。 2. **泛型(Generics)**:泛型允许我们编写可重用的代码,这些代码可以操作多种类型的数据。例如,...

    UITextField-category.zip

    `UITextField-category.zip` 文件提供了一个自定义的类别(Category)来扩展原生的 `UITextField` 类,增加了更多便利的方法,使得开发者能更高效地创建和定制 `UITextField` 对象。 首先,了解什么是Category。在...

Global site tag (gtag.js) - Google Analytics