首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Objective-C中的类别用法

在Objective-C中,类别(Category)是一种允许向现有类添加新方法的方式。类别的主要目的是将功能扩展添加到已有的类中,而不需要修改原始类的实现。类别可以被用来将一个类的实现分解为多个易于管理的部分,或者为其他开发者提供扩展点。

类别的定义和使用如下:

  1. 定义类别:
代码语言:txt
复制
@interface ClassName (CategoryName)

// 在这里声明新的方法

@end

@implementation ClassName (CategoryName)

// 在这里实现新的方法

@end
  1. 使用类别:
代码语言:txt
复制
#import "ClassName+CategoryName.h"

// 调用类别中的方法

在Objective-C中,类别的使用非常灵活,可以用来实现许多功能,例如:

  • 为系统类添加新的方法,以便在项目中使用。
  • 将一个类的实现分解为多个易于管理的部分。
  • 为其他开发者提供扩展点,以便他们可以在不修改原始类的情况下添加新功能。

需要注意的是,类别中的方法不能与原始类中的方法重名,否则会导致编译错误。此外,类别不能添加实例变量,只能添加方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Objective-C集合类

下面详细介绍Objective-C集合类以及每个集合类用法,学过其他面向对象编程语言小伙伴们看到OC集合类会有种莫名亲切感,理解起来问题不大,可以类比Java集合类去学习...在Objective-C集合类主要包括不可变数组--NSArray,  可变数组--NSMutableArray,   不可变字典--NSDictionary,    可变字典--NSMutableDictionary...        上面已经写了一种数组遍历方式,下面总结了其他遍历方式,用枚举器(类似Java迭代器)和快速枚举(类似PHPforeach)         (1)枚举器(迭代器)用法                 ...foreach用法 1 2 3 4 for(id obj in array) {     NSLog(@"%@", obj); }   5.对可变数组进行排序 //对数组进行排序 [...NSNumber用法如下     ​    ​    ​    ​把基本类型包装成对象便利构造函数     ​    ​    ​    ​    ​-(id) initWithChar : (char

1.1K70

Objective-C属性机制

Objective-C 2.0属性机制为我们提供了便捷获取和设置实例变量方式,也可以说属性为我们提供了一个默认设置器和访问器实现。...和setter来访问被隐藏实例变量,OC属性机制就为我们提供了默认getter和setter方法。...下面我们要学习一下OC属性机制。         ...在使用getter和setter方法时有一点要注意:以neme为例,getter方法名为 name, 而setter名为 setName;在使用getter和setter方法时和普通函数用法一样 ​...nonatomic: 线程不安全;   我们可以简写属性,直接在接口文件吧{}省略掉,直接用@property来定义方法,省去实现文件@synthesize, 访问属性时用_propertyName

1.3K70

Objective-C语法糖

当时把注意力放在了深浅拷贝内存地址分析上了,就没太在意,测试做完啦,在回顾时候发现数组是用下标的方式获取! 于是就有了个疑问,在OC这样写也行?...为了更好偷懒,于是去百度上Google啦一下这是‘ Xcode 4.4LLVM compiler 4.0’ 引入新特性(2012年WWDC发布东西)。...到这小菜本人就有柳暗花明又一村感觉啦~就可以好好偷一下懒啦~于是系统总结了一下引入特性,话不多说,Coder说话哪能少了code呢!...    在之前博客我是这样初始化NSArray: 1 //NSArray便利初始化 2 NSArray *array1 = [[NSArray alloc] initWithObjects:@...    也引用我之前博客得一段代码吧 //不可变字典初始化 NSDictionary *dictionay = [NSDictionary dictionaryWithObjectsAndKeys

96150

Objective-C继承和多态

Objective-Csuper是指向直接父类指针,而self是指向本身指针,self就相当于javathis指针。...-(NSUInteger) hash; 返回对象哈希值; 1 2 3 //hash用法 NSUInteger hash = [o2 hash]; NSLog(@"%p", hash);         ...-(BOOL) isEqual:(id)object; 比较两个对象是否相同,默认是使用地址进行比较,且hash值一定要相同 1 2 3 4 5 6 7 8 9 10 11 //isEqual用法...= str1"); }     ​    ​Objective-C继承         继承是is-a关系,比如猫咪是一个动物,那么动物是父类,而猫咪是动物子类。...2014-07-30 08:38:12.958 HelloOC[483:303] 我是富二代BILL`s son,我超喜欢飙车 ​Objective-C多态     ​    ​多态简单说就是对于不同对象响应同一个方法时做出不同反应

1.1K80

Objective-CBlock(闭包)

学习OCblock之前也小担心一下,Block在OC属于高级部分,心里有又有个疑问:学起来难不难?...看过Block部分,感觉Block挺好理解,用起来也挺顺手,Block没我想象那么难理解。         废话少说,学习一门新编程语言是少不了代码量支持,所以代码是少不了。...下面就通代码来认识一下OCblock使用。   ...,然后在调用代码块时候修改两个局部变量值,然后再代码块显示变量值。         ...2.成员变量在block使用     ​    ​成员变量在block使用是加上self->a使用,所以在声明成员变量时候加不加__block,在成员函数代码块中都可以访问修改;     ​    ​

1.4K90

Objective-Cruntime机制应用

Objective-Cruntime机制应用 一、初识runtime         Objective-C是一种动态语言,所谓动态语言,是在程序执行时动态的确定变量类型,执行变量类型对应方法...,首先,在头文件没有提供任何方法接口,我们没有办法使用点语法做任何操作,privateOne和PrivateTow两个变量虽然声明在了头文件,却是私有类型,通过指针方式我们虽然可以看到他们,却不能做任何读取修改操作...,xcode提示如下: ?...,你或许会遇到一个问题,ARC下,编译器不允许你将int类型值赋值给id,在buildset中将Objective-C Automatic Reference Counting修改为No即可。...六、动态为类添加方法         这个runtime机制最强大部分要到了,试想,如果我们可以动态向类添加方法,那将是一件多么令人激动事情,注意,这里是动态添加,和类别的最大不同在于这种方式是运行时才决定是否添加方法

38250

Objective-CNSArray类解读

Objective-CNSArray类解读     NSArray数组类是Objective-C语言中常用也是重要一个类,除了开发中常用到一些基础功能,NSArray及其相关类还封装了许多更加强大功能...NSArray属性与方法: //获取数组中元素个数 @property (readonly) NSUInteger count; //通过下标获数组元素 - (ObjectType)objectAtIndex...; //像数组追加一个元素 这个方法会返回一个新数组 - (NSArray *)arrayByAddingObject:(ObjectType)anObject; //像数组追加一组元素...)range; //获取某个元素在数值下标值 - (NSUInteger)indexOfObject:(ObjectType)anObject; //获取某个范围内元素下标值 - (NSUInteger...:(ObjectType)anObject; //在一定范围内 获取与给定元素相同元素在数组最小下标值 - (NSUInteger)indexOfObjectIdenticalTo:(ObjectType

1.2K20

Objective-C类目,延展,协议

Objective-C类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛,瞬间感觉OC好高大上。...一.Objective-C类目(Category)         在Objective-C比其他OOP编程语言多了个类目,在OC除了用继承来扩充类功能函数外我们还可以用类目来实现。...二.Objective-C延展(Extension)         简单说匿名类目就是延展,在延展定义方法是类私有的方法只能在类内部调用,定义延展方式就是把类目中括号得名字省略掉,括号保留这就是延展...协议(protocol)提到OC得协议个人感觉和JAVA接口用法极为相似。...在声明对象时候引入协议可以类比这Java得泛型来学习, 例如声明一个遵守FirstProtocol协议对象: id obj;下面我们将用一个事例来介绍具体用法     ​    ​    ​

98580

Objective-C单例模式

不过在23种设计模式里面单例模式还是算比较好理解, 那么在OC又是怎么来表示单例模式呢?下面会结合着代码,理解一下OC得单例模式。     ​    ​...下面我们会建立一个生成单例类SingletonClass,在实现文件定义各种方法来实现我们单例模式。     ​    ​...1.单例模式一般用全局静态对象来实现,所以我们在SingletonClass.m定义一个静态全局变量是少不了 1 2 //定义静态全局变量 static SingletonClass *single...= nil;     ​    ​2.上面的静态变量是定义在实现文件所以是私有的,要想获取该类实例得有个getInstance方法来获取实例,在给静态变量分配内存空间之前首先要判断是否已经分配过啦...,下面开始我们测试吧;     ​在main函数代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 //单例模式测试 SingletonClass

1.8K70

Objective-C委托(代理)模式

还是那句话,第一次接触代理模式是在Java接触,在Java实现代理模式和接口是少不了。当时学习Spring时候用到了接口回调,其实就是实现委托代理模式。...简单说代理就是把相应功能交给实现接口相应来解决。在OC没有接口该如何实现代理呢?...前面的博客笔者说提了一句,在OC协议和Java接口极为相似,都是只声明方法而不去实现,方法实现在OC交个遵循协议类,而在Java中方法实现交给实现接口类。...其实学习一门新语言和以前学习过语言对比着理解还是蛮好理解,废话少说,切入正题,谈一下OC委托代理模式。         下面还是用房屋中介和房东例子来表示OC代理模式。...1.在Java写代理的话,我会先写房屋中介接口,所以在OC我们首先也要先声明房屋中介协议,Protocol方法是每个房屋中介必须有的方法,所以在Java中会抽象成接口,而在OC我们会把他声明为协议

1.2K90

Objective-CBlock回调模式

在前面的博客中提到了Block概念和使用方法,个人感觉Block最爽用法莫过于在回调时用block。感觉比委托回调和目标方法回调用着要顺手,好不好用还得读者亲自用一下才知道。...如果 读者之前用过SSH框架的话,看到OCBlock回调,会感觉非常亲切,和Java接口回调像极了。还是那句话,上些Block回调代码最为直接。...在Component我们只给出代码块声明,不进行实现,然后在Controller中进行实现,在Component中进行调用,也就是说由组件提供代码块形式和代码块参数,在Controller给出业务逻辑...,为了实现组件封装,我们用延展来隐藏我们组件要用到方法,在延展声明了我们要使用组件,然后再实现部分进行组件初始化和编写组件要调用代码块,代码块参数由组件提供,而控制器只提供业务逻辑控制...,在控制器我们需要 启动我们要使用组件,也就是组件runBlock方法。

1.6K50

Objective-C 我接受点符号

我甚至将点符号描述为 Objective-C 代码一种气味。 因此,你可能会惊讶地发现,我最近在代码采用了点符号!事情是这样......在我观念转变之前 我有两个编码习惯让你们一些人觉得很奇怪: 对于一个属性,我更倾向于通过它 ivar 进行访问。 当然,我也没有使用点符号。 有人说,"访问属性时一定要使用 self."。...但关键就在这里:ReactiveCocoa 功能性反应编程风格依赖于键值观察(KVO)。 与 KVO 相比,我更喜欢使用通知主要原因是,我喜欢使用单独方法来处理模型变化不同方面。...而在 KVO ,所有的观察都会转到一个方法,然后该方法必须根据变化类型来处理分派。 但我不知道是,直接操作 ivar 并不会触发 KVO。...如果要使用 KVO,类必须使用setter来操作自己属性。因此,我直接 ivar 操作实际上阻止了其他人在我类上使用 KVO。 这样不好。

7610

Objective-C 变量作用域 原

iOS,修饰变量关键字有四个,分别是:  1  @public  被这个关键字修饰变量是完全开放,只要有这类对象存在,就可以访问到这个变量。...2  @protected 被这个关键字修饰变量是受保护,只有在声明变量这个类中和它子类,可以访问。  ...3  @private 被这个关键字修饰变量是私有的,只能在声明这个变量类中使用,子类也不能使用。  ...4  @package 这个关键字比较难理解,大致意思是被修饰变量是封装,在本框架内可以自由使用,效果和@public 相同,而在框架外不能使用,其子类也不能使用,效果又相当于@private。...一点扩展: 访问类变量,我们可以用->符号,它和点语法区别在于,点语法实际上是调用set与get方法,而->符号是直接访问变量。 专注技术,热爱生活,交流技术,也做朋友。

52420

关于对类别 延展 协议 一些属性声明词用法

什么是类别类别是在现有类基础上,不改动现有的代码,增加新功能。但是不能增加新实例变量,但是可以通过runtime增加属性。 解释这么多,说都有点累。 什么时候用类别呢?...现在想要给基类扩展方法 我们都知道类别对基类所有类型实例变量都有访问权限 我们可以无限制添加类别 我们只需要在之前基类添加所需要实例变量 #import <Foundation/Foundation.h...我们一般定义协议用于获取数据和代理出去方法 用DataSource获取数据 用Delegate代理出去方法(你也可以用这个获取数据) 我们可以给基类添加类别 实现自己要实现代理方法 @protocol...Class1Delegate -(void)method; @end 我们在class1添加了一个代理 我们想让UIButton去实现 我们可以添加一个类别 -(void)doDelegateMethod...延展 协议三个用法头都大了 如果说有错误 请及时联系我

35330

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券