`

@interface和category和extension小结

 
阅读更多

注意:category是一种机制,没有关键字@category

Category的作用,它不需要使用子类(Subclassing)机制,就允许向一个类文件中添加新的方法声明,并且在类实现的文件中的同一个名字下定义这些方法。

 

定义category的过程大致可分为以下几个步骤: 

    第一步、创建一个带有接口的新文件,即创建已有类,命名惯例:ClassName+CategoryName,注意扩展的类必须是已经存在的,例如下面扩展的NSString 

    第二步、在新文件中添加需要扩展的方法及方法的实现,即需要添加的分类。注意只能添加方法,不能添加变量。  

 

写了一个简单的例子,为NSString类添加一个方法,一个NSString对象就可以调用这个方法了。

.h文件

 

#import <Foundation/Foundation.h>
@interface NSString(Hello)
- (void) helloMethod;
@end

 

 .m文件

 

#import "NSStringHello.h"
@implementation NSString(Hello)
- (void) helloMethod{
    NSLog(@"hello ,this is a ”@cantegory“ test");
}
@end

 

 为什么对类进行扩展的feature被称作category?该名称应该反映了某种初衷,那就是当某个类比较复杂庞大时,我们可以对它的功能(也就是成员函数)进行分类,并且把它们放入不同的文件加以实现。

 

 

 

CategoryExtension都是用来给已定义的类增加新的内容的。

Category和原有类的耦合更低一些,声明和实现都可以写在单独的文件里。但是只能为已定义类增加Method,而不能加入instance variable。

Extension耦合比较高,声明可以单独写,但是实现必须写在原有类的@implementation中。可以增加Method和instance variable。

Extension给人感觉更像是在编写类时为了封装之类的特性而设计,和类是同时编写的。而category则是在用到某一个framework中的类时临时增加的特性。

Extension的一个特性就是可以redeclare一个instance variable,将之从readonly改为对内readwrite.

 

quding:使用Extension可以更好的封装类,在h文件中能看到的都是对外的接口,其余的instance variable和对内的@property等都可以写在Extension,这样类的结构更加清晰。

 

 

分享到:
评论

相关推荐

    java @interface 注解详解及实例

    在 Java 中,定义注解其实和定义接口差不多,只需要在 interface 前添加一个 @ 符号就可以,即 `@interface Zhujie{ }`,这就表明我们定义了一个名为 `@Zhujie` 的注解。注解中的每一个方法定义了这个注解类型的一个...

    Android接口Interface的使用

    在Android开发中,接口(Interface)是实现组件间通信的重要机制。它允许类与类之间、组件与组件之间通过约定的方式来交互数据和控制流程。在这个名为"Android接口Interface的使用"的示例中,我们将深入探讨如何定义...

    函数式接口@FunctionalInterface使用示例

    JDK8接口中的静态方法和默认方法,都不算是抽象方法。 接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中的方法,那么也不算抽象方法。 该注解不是必须的,如果一个接口符合”函数式编程”定义,...

    Objective-C, Category, 实现分析, 源代码

    @interface SQIClass (Extension) - (void)extensionMethod; @end // SQIClass+Extension.m @implementation SQIClass (Extension) - (void)extensionMethod { // 方法实现 } @end ``` Category的实现主要依赖于...

    Firmware-extension-interface

    Casambi Firmware Extension Interface(以下简称FEI)是一项由Casambi Technologies Oy开发的技术,用于扩展Casambi模块的功能,使其能够更好地与各种外部设备进行通信和控制。该接口适用于Casambi CBM-003B/C模块...

    category练习代码

    Category的声明通常包含类别名和引入的协议,如`@interface NSString (Extension) &lt;NSObject&gt;`。 在Objective-C中,Category不仅限于添加方法,还可以添加属性,但需要额外的步骤。由于Category不能直接添加实例...

    CategoryTest Demo代码

    Category还可以用于为类添加私有方法,或者为分类中的方法提供实例变量,这需要用到Category的扩展(Extension)。在Category中声明实例变量时,必须同时在实现文件中定义一个与之对应的ivar(实例变量)。这样,...

    Robot Interface介绍_interface_interfacefanuc_fanuc_fanucrobot_robo

    在汽车制造业中,FANUC的Robot Interface常被用于车身焊接、涂装和装配线,实现与焊枪、涂装机器人和装配工位的精确配合。在电子产品组装领域,它可以与高精度的视觉系统结合,完成精细部件的组装和检测。 总结,...

    iOS常用category

    在iOS开发中,Category是一种强大的工具,用于扩展已有类的功能,而无需继承。...但同时,也要注意其潜在的问题,如方法冲突和加载顺序不确定性,合理规划和使用Category是每个iOS开发者应掌握的技能。

    Objective-c Category和Protocol

    Objective-C 中的消息传递机制、Category 和 Protocol 共同构成了其强大的面向对象编程基础。消息传递机制使得代码更加松散耦合,Category 提供了灵活的扩展机制,而 Protocol 则确保了代码的一致性和可维护性。合理...

    ios demo,自定义一个类,接口interface和implementation

    这个“ios demo”项目专注于类的接口(interface)和实现(implementation),这是Objective-C编程中的核心概念。Objective-C是苹果平台上的主要编程语言,它在C语言的基础上添加了面向对象特性,通过消息传递机制来...

    深入理解abstract class和interface

    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性...

    iOS Category基类扩展源码

    5. **Category与Extension的区别** - Category是公开的,可以给任何类添加方法;Extension则隐式的,主要用于隐藏类的私有实现,只能在该类的.m文件中定义。 - Extension可以在接口中声明实例变量,Category则不能...

    JESD223-1B_UFSHCIUnified Memory Extension

    JESD223-1B_UFSHCIUnified Memory Extension 是一份关于 Universal Flash Storage Host Controller Interface(UFSHCI)的技术标准文档,由JEDEC(Joint Electron Devices Engineering Council) solid state ...

    注解的使用 注释文档的生成

    自定义注解:public @interface FirstAnno {} #@interface 元注解:加在自定义注解的类接口上 @Retention(RetentionPolicy.RUNTIME ) SOURCE 给编译器看的# 源码存在,字节码不存在 CLASS 给虚拟机的类加载器看的,#...

    Intel Management Engine Interface

    总之,Intel Management Engine Interface是Intel提供的一个强大且复杂的技术,旨在提升计算机的管理和安全性。然而,它的存在也伴随着潜在的安全风险,用户应根据自身需求和安全策略来适当地利用和管理IMEI。

    给图片增加水印 UIImage+Category

    本教程将详细介绍如何通过Category的方式给UIImage和UIImageView对象添加水印功能。 Category是Objective-C中的一种机制,它允许我们扩展已有的类,而无需继承。在这个案例中,我们创建了两个Category,一个用于...

    华为HDB Interface驱动.zip

    华为HDB Interface驱动是针对华为设备进行通信和管理的关键软件组件,主要用于连接和控制华为的智能硬件设备,如服务器、存储系统和网络设备。HDB(Huawei Data Bus)接口驱动是华为自主开发的一种高效、安全的数据...

    Objective-C(简称ObjC)是一门基于C语言的面向对象编程语言

    Objective-C(简称ObjC)是一门基于C语言的面向对象编程语言,它结合了C语言的灵活性和Smalltalk语言的面向对象特性。以下是一个简要的Objective-C语言教程,涵盖了一些基础知识和概念。 1. Objective-C的起源与...

Global site tag (gtag.js) - Google Analytics