【OC学习-21】什么是类的类目category和类的延展extension?以及如何创建和注意事项

(1)什么是类目

声明一个类时,有实例变量和方法,而如果事后想增加方法的话直接在类里面添加感觉会显得杂乱无章,如果创建一个子类的话,层级多了会糊涂掉。至此,类目诞生。

从上可知,类目就是类的一个派生,你可以理解成事“只有方法,没有实例变量”的一种子类。

(2)创建类目

可以和创建类一样通过New File >>> Objective-C category创建,选择从ASStudent类派生的话,如创建的名字是life,那么文件名则默认是ASStudent+life.h和ASStudent+life.m。具体文件格式如下:

//和子类的.h文件很像,只是类目名字是用括号()括起来的
#import "ASStudent.h"

@interface ASStudent (life)

@end
//和子类的.m文件很像,同样类目是在括号里面的
#import "ASStudent+life.h"

@implementation ASStudent (life)

@end

注意事项:

a:我们可以直接把这个类目的.h和.m内容写在类的.h和.m文件里面,这样阅读时可以一目了然;

b:类目只有方法没有实例变量,方法如果和类的方法重名的话会覆盖类原来的方法,也就是说回优先调用类目的方法。

(3)什么是延展

我们定义类时说在.h里写的变量如果不是public一般不能被直接调用需要用方法,而定义的所有方法都可以被调用,如果我有的方法不想被外部调用只给内部使用呢?至此,延展出现。

从上可知,延展就是类似于“定义私有方法”的一种子类。

(4)延展的创建

通过New File >>> Objective-C extension来创建,选择ASStudent类,延展名叫hello,那么会自动创建一个.h文件叫ASStudent_hello.h,没有.m文件,因为可以直接在类的.m里写即可。

//看形式,其实就是没有名字的类目
#import "ASStudent.h"

@interface ASStudent ()

@end

在类的.m里直接书写方法即可。

注意事项:

a:可以不通过创建文件来创建延展,可以直接在.m文件里写@interface和@implementation,注意这两个都要写在.m文件里,因为如果把@interface写在.h里,那么里面的方法都是public的;

b:可以直接省略@interface,直接在.m文件里写方法即可,但是建议书写,至少阅读起来在文件一开始的几行就告知了哪些是私有方法。

时间: 2024-10-26 01:21:32

【OC学习-21】什么是类的类目category和类的延展extension?以及如何创建和注意事项的相关文章

(转载)OC学习篇之---类的定义

之前已经介绍了OC中的一个程序HelloWorld,今天我们继续学习OC中类的相关知识. OC和C的最大区别就是具有了面向对象的功能,那么说到面向对象,就不得不说类这个概念了,如果学过Java的话,那么对类和对象的概念就不陌生了,因为Java是非常纯正的面向对象设计语言.关于类和对象的概念,这里就不仔细介绍了,网上有各种解释.我们之间来开一下OC中如何定义一个类,如何实例化出一个对象等. 首先我们新建一个工程,系统会自动创建main.m文件的,这时候,我们右键项目,选择New File.. 然后

(转载)OC学习篇之---类目的概念和使用

上一篇文章介绍了OC中的@class关键字的使用,这一篇我们介绍一下,OC中的一个特有的亮点:类目 首先我们来看一下场景,如果我们现在想对一个类进行功能的扩充,我们该怎么做? 对于面向对象编程的话,首先会想到继承,但是继承有两个问题: 第一个问题:继承的前提是这个类可以被继承,因为在Java中有些类是不允许继承的,定义成final类,同样的OC中也是有不可以继承的类. 第二个问题:这个类可以被继承,但是继承我们知道是侵入性的,就是我可能只是想实现一个功能,但是继承之后,子类就会把父类的所有功能(

OC学习总结之面向对象和类

OC学习总结之面向对象和类 Objective-c是c语言的母集合,它的原意就是在原始的c语言的主体上加入面向对象的特性.1.面向对象和面向过程  面向对象和面向过程是编程的两种思考方式.面向对象,简称OOP,它是以事物为中心,参与事件的事物是核心,完成事件只是事物的一个小任务.面向过程,简称OPP,它是以事件为中心,事件是核心,列出了完成事件的每一个步骤,一步一步完成.也就是面向对象侧重于从问题在寻找客体.客体的作用.客体间的关系即“谁”.“做什么”.“怎么做”,面向过程侧重于问题的分解即“事

(转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

前一篇说到了Foundation框架中的NSDirctionary类,这一一篇来看一下Foundation的其他常用的类:NSNumber,NSDate,NSException. 注:其实按照Java中集合的思想,应该还有一个Set,是的,OC中有NSSet和NSMutableSet这两个类的,但是,这里我为什么不单独介绍了呢?因为他的操作和NSArray是非常相似的,只是他和NSArray有一个区别就是他不能放重复数据,而且他也是无序的.其他没什么了,所以就不单独介绍了,而且NSSet在后面的

(转载)OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类,今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArray类是不可变的,NSMutableArray类是可变的. 下面就先来看一下NSArray类: 一.NSArray类 1 // 2 // main.m 3 // 16_NSArray 4 /

OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

1.NSNumber 这个类主要是用来封装基本类型的,说到这里,就不得不说一下了: OC中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去,这个类似于Java中的自动装箱和拆箱,Java中的集合其实也是不允许存入基本类型的,但是我们任然看可以那么操作,就是因为有自动装箱功能,如果你将Eclipse的JDK改成5.0之前的,你看看还能操作吗.. 注:那为什么基本类型不能存入到集合中呢? 原因是在操作集合的时候会操作集合元素中的方法,但是基本类型是没有

oc学习之对象作为类的属性

对象做为类的属性 1. 一个Target中的类无法直接在另外1个Target中访问. 2. 类的属性代表什么? a. 类的属性代表这类事物具有的共同的特征 b. 类的属性代表这个类所拥有的东西. 灯: 属性: 形状 功率 价格  品牌 剩余寿命 方法: 照明. 音响: 方法: 发声音. 门: 属性: 尺寸 材料 颜色 价格 方法: 开 关 3. 类的方法代表什么? a. 代表这个类所具备的行为. 这个类所具备的功能. b. 一个类有什么方法 就去分析这个类有什么功能. 4. 属性的本质是变量.

OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类: http://blog.csdn.net/jiangwei0910410003/article/details/41788223 今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArray类是不可变的,NSMutableArray类是可变的.

OC学习-类的扩展

类目-Category 作用:主要为没有源代码的类添加方法(比如系统的类) 定义Category 新建文件 选择OC Category模板 填写类和分类名 在.h中添加方法声明 在.m中添加方法实现 声明Category NSString+StringMethod.h @interface NSString (StringMethod) - (void)sayHi; @end NSString+StringMethod.m @implementation NSString (StringMeth