`

Object-C中的动态特性Category

 
阅读更多
刚接触Object-C哪会儿,因为名字里带着个“C”以及类名中的“*.h”、“.m”习惯,老觉得Object-C就是一个很古老的东西,不会支持接口,多态之类的特性。其实别人早就提供了,名字不一样而已。不要带着偏见去看待事物,恩恩!

在Object-C中,提供了一种动态扩展类的方式——Category,它可以动态的为已存在的类添加新的方法,有点类似于Ruby的打开类技术,不同的是Category必须为扩展创建一个新类,新类的名称一般约定为“原类名称+扩展名”。有了这个技术之后,开发者在写代码时就可以从把原始的类设计得非常小,然后在功能增加时再逐步扩展,另外,可以很容易的把新添加的行为模块化。

Category的实现和使用方式非常简单,比方说,在写UI的时候,想使用自己的字体类型和字体大小,这个时候就可以尝试使用Category扩展UIFont支持自己想用的字体和字体大小。首先创建一个Category新类,(UIFont+SnapAdditions.h)
#import <UIKit/UIKit.h>
@interface UIFont (SnapAdditions)

+(id)xnl_snapFontWithSize:(CGFloat)size;

@end

#import "UIFont+SnapAdditions.h"

@implementation UIFont (SnapAdditions)

+(id)xnl_snapFontWithSize:(CGFloat)size
{
    return [UIFont fontWithName:@"Action Man" size:size];
}
@end

创建好之后,在想使用该方法的类中引入Category类,然后像使用UIFont自身的方法一样使用新的方法就行了。
#import "UIFont+SnapAdditions.h"
…
self.statusLabel.font = [UIFont xnl_snapFontWithSize:16.0f];
...

应用场景:
  • 想为已有类(自己创建的或者SDK类库)扩展新的方法。
  • 多个团队协作时,需要对同一个类进行修改,可以有效隔离相互影响。

注意事项:
  • 新创建的Category类不能拥有自己的变量,需要自己的变量可通过继承实现。
  • 新创建的Category类会覆盖同名的原类的方法,因此给新方法命名的时候最后特殊一点,避免覆盖原类方法,导致不可预知的错误。
  • 新创建的Category类虽然也有“.h”和“.m”文件,但是实现类并不需要实现所有的接口方法,只要不去调用方法就不会有问题。
分享到:
评论

相关推荐

    如何学习Object-C语言《PDF文档》

    Object-C在C语言的基础上增加了面向对象的特性,因此熟悉C语言的基本语法、控制结构、函数和指针等概念至关重要。要花时间去熟练掌握这些基础知识,因为它们构成了Object-C的基础。 学习Objective-C的类和对象概念...

    如何学习Object-C语言(PDF文档)

    Object-C在C语言的基础上增加了面向对象的特性,因此熟悉C语言的基本语法、控制结构、函数和指针等概念至关重要。要花时间去熟练掌握这些基础知识,因为它们构成了Object-C的基础。 学习Objective-C的类和对象概念...

    如何学习Object-C语言

    Object-C在C语言的基础上增加了面向对象的特性,因此熟悉C语言的基本语法、控制结构、函数和指针等概念至关重要。要花时间去熟练掌握这些基础知识,因为它们构成了Object-C的基础。 其次,学习Objective-C的类和...

    Object-C语言教程

    3. **动态类型**:Object-C支持动态类型,编译时不知道对象的确切类型,运行时才确定。 4. **协议(Protocol)**:协议定义了一组可选的方法,类似于Java或C#的接口,允许类间进行约定。 5. **分类(Category)**...

    Object-C语言教程&案例&相关项目资源(PPT文档)

    Category是Object-C的一个独特特性,允许你在不修改原有类源码的情况下扩展类的功能。Protocol则类似于Java或C#的接口,定义了一组方法签名,用于类间通信。类可以遵循一个或多个协议,以实现特定的行为。 **4. ...

    Object-C基础教程

    Object-C,作为苹果公司开发的Objective-C语言的简称,是iOS和macOS应用程序开发的核心语言。它是一种面向对象的编程语言,基于C语言,并加入了Smalltalk的类和消息传递机制,使其在C的基础上具备了更强大的面向对象...

    Object-C语言教程、案例、相关项目资源《PPT文档》

    提供的《Object-C语言教程&案例&相关项目资源.pdf》很可能包含了Object-C的基础语法、高级特性、实际项目案例等内容。阅读这样的资源可以帮助你更深入地理解和掌握Object-C,同时,`说明文档.txt`可能提供了资源的...

    Object-C语言教程&案例&相关项目资源

    - **对象与类**: Object-C中的所有数据都是以对象的形式存在,类是创建对象的模板,定义了对象的行为和属性。 - **消息传递**: 与其他面向对象语言不同,Object-C使用消息传递机制来调用方法,而非点操作符。 - *...

    《Object-Oriented Programming with Object C》 英文高清原版 PDF

    2. **Objective-C语言特性**:Objective-C是在C语言的基础上扩展的,保留了C的语法结构,同时添加了消息传递机制、类和其他面向对象的特性。消息传递是Objective-C的关键,通过`[receiver message]`的方式调用方法。...

    Object-C/Swift官网文档

    在IT行业中,Object-C和Swift是苹果公司iOS、macOS及其他平台开发的两种主要编程语言。这份名为"Object-C/Swift官网文档"的压缩包文件提供了这两种语言的官方资源,确保开发者能够获取到最准确、最新的信息。下面将...

    Object-C语言教程0220.zip基础知识及相关案例

    此外,Objective-C支持动态类型和运行时特性,这使得在程序运行过程中可以改变对象的类型,或在运行时决定要执行的方法,这是许多其他静态类型语言所不具备的。然而,这也对调试和性能优化提出了挑战,因此理解何时...

    Object-C语言入门教程&代码示例 .zip

    本教程将帮助初学者了解并掌握Object-C的基本概念、语法特性以及实际编程技巧。 ### 1. 对象与类 在Object-C中,一切皆为对象。对象是类的实例,而类是对象的蓝图。定义一个类需要使用`@interface`关键字,其中...

    Object-C语言,用C语言实现面向对象

    Object-C,全称Objective-C,是一种基于C语言的、面向对象的编程语言,由Stepanov和Moss在1983年为NextStep操作系统开发。苹果公司广泛使用Objective-C作为其iOS和macOS操作系统以及相关框架如Foundation和AppKit的...

    Object-C语言相关项目的示例

    总结来说,"Object-C语言相关项目的示例"涵盖了Objective-C的关键特性,包括类、消息传递、Category、协议、内存管理和Blocks,以及如何利用Foundation和UIKit框架进行应用开发。通过深入学习和实践这些示例,开发者...

    Object-C、C、C++混合编程

    在IT行业中,Object-C、C和C++的混合编程是一种常见的技术实践,特别是在开发iOS和macOS应用程序时,因为Apple的开发环境Xcode支持这三种语言的集成。这篇博文(虽然链接不可用)可能探讨了如何有效地在这些语言之间...

    Object-C的语法与Cocoa框架_V1.0_ios_base32u_

    Object-C是苹果公司为Mac OS X和iOS操作系统开发的应用程序编程语言,它是C语言的超集,融入了Smalltalk的面向对象特性。了解Object-C的基础语法和Cocoa框架对于开发苹果平台的应用至关重要。 **一、Object-C语法...

    object-c 编程 2

    2. **语法特性**:Objective-C在其C语言基础上扩展了消息传递机制,使动态类型成为可能。例如,`[对象 方法]`的调用方式是其独特之处。 3. **Category与Extension**:Category允许我们给已有的类添加新的方法,而...

    object-C &&iphone开发入门

    "ObjC.pdf"可能更专注于Object-C语言本身的细节,包括语法、内存管理(如ARC,Automatic Reference Counting)、 Blocks(代码块)以及Category等特性。Blocks是Objective-C中的一种内联闭包实现,可以用来封装一段...

    Object-C语言教程&案例&相关项目资源.docx

    6. **与C语言兼容**:Objective-C是C语言的超集,可以直接调用C语言的函数和库,并且可以在Objective-C代码中混合使用C语言代码。 #### 三、Objective-C的语法特点 1. **类和对象**:Objective-C使用类(Class)和...

Global site tag (gtag.js) - Google Analytics