OC语言中类目,延展,协议

一.类目

指向已知的类中添加新方法,不破坏封装性。已知类可以是自定义的类和系统的类。

1.类目的实现和声明

建一个学生类,并增加类目

(1).声明(是在Student+Working.h中)

必须引入原类,这里是Studnet类。

(2)  .实现(是在Student+Working.m中)

注意引入

2.类目的使用

  i.不能再类目中添加实例变量

  j.可以为一个类添加多个类目,但类目名和方法名不能重复

  k.不能随意重写类目的方法

3.类目的局限性

  i.如果在类目中重写父类的方法可能导致super消息的断裂,因为在类目中的方法优先级高于父类。

  j.无法在在类目中添加实例变量。

二.延展

通过在自己的类的实现文件中添加添加类目来声明私有方法,延展相当于一个匿名的类目。

1.声明

在studnet.m文件中,在@implementation之上,方法是不需要实现的

延展不提供名称表示必须实现,提供名称可以不实现。

2.实现

在studnet.m文件中,在@implementation和@end中实现方法。

以上在main.m中调用并打印的结果如下:

三.协议

声明一些方法,让别的类来实现,也可以为类增加方法

1.声明一个协议

文件中

2.在导入协议的头文件

3.在文件中采用协议

4.并在文件中实现协议中的方法

时间: 2024-10-09 04:11:57

OC语言中类目,延展,协议的相关文章

OC教程3-类目延展协议

OC3-语言特性 本章主要讲解OC语言特性 类目(Category) 延展(Extension) 协议(Protocol) 1,类目 OC语言中的类目机制只有一个作用:为任何一个类添加方法 现在我们创建一个Student类 @interface Student : NSObject @property(nonatomic,strong)NSString * name; @end @implementation @end 如果想为Student类添加一个方法,现在有两种方法 直接修改Student

类目 延展 协议

1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. 首先先建个类目 command+n 给什么类写类目下面就写那个类的名字 上面填的是给这个类添加的方法的名字 @interface NSMutableArray (Sort) //为NSMutableArray类添加Sort方法,Sort就是类目名,做到见名知意-(void)invert;//方法@end 实现部分 #import "NSMutableA

OC -- 类的类目 , 延展 , 协议

类目 分两部分: 1.系统已经写好的类目:按照功能对系统的类方法进行区分. 类目从@interface开始,后面是当前类名字,类名后是分类的功能, 到@end结束. 2.我们创建的类目,一般是为了把系统的类进行扩充. 对系统的类(例:NSString)添加文件Objective-C File {File:StringMethod; File Type:Category; Class: NSString}后,会自动出现@interface NSString (StringMethod).文件名为:

OC-类目延展协议

类目(Category) 延展(Extension) 协议(Protocol) 一.类目 OC语言中的类目机制只有一个作用:为任何一个类添加方法 注意: 1.不能在分类中添加属性,只能添加方法 2.如果再分类里面使用@property,那么它只能生成getter和setter的声明,没有实现 3.如在在分类中写了与本类同名的方法,优先调用分类里面的方法,所以在分类中定义类的时候,尽量避免和本类中的方法重名 4.在分类里面可以访问本类里面所定义的属性 我们为NSString类添加一个方法,实现字符

[objective-c] 03 - 类目 延展 协议

本章主要讲解OC语言特性 类目(Category) 延展(Extension) 协议(Protocol) 1.类目 OC语言中的类目机制只有一个作用:为任何一个类添加方法 现在我们创建一个Student类 @interface Student : NSObject @property(nonatomic,strong)NSString * name; @end @implementation @end 如果想为Student类添加一个方法,现在有两种方法 直接修改Student类的源码,声明一个

类目,延展,协议的基本概念

Catgory(类目/分类) 1.分类是给原有类添加方法,它只能添加方法,不能添加属性(成员变量) 2.分类中定义@property,只会生成setter/getter方法的声明,没有方法的实现以及私有变量. 3.分类中的方法不能和本类的方法名相同,否则会有警告,而且调用的时候会优先调用分类的方法,即覆盖本类的方法. 4.分类的方法和实现分开,一对多,1个.h文件对应多个.m文件,典型的分散实现: 延展(Extension) 1.延展为类创建私有方法,一个.m文件对应多个.h文件,分配权限时可以

【objective-c】类目 延展 协议

1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. Category的使用场景有那些呢:1.类包含了很多个方法实现,而这些方法需要不同团队的成员来实现2.当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时. Category能实现上面的需求,当然也有使用Category是需要注意的问题: 1.Category可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就通过继承创建子类

Objective-C类目延展协议

一.类目:(Category) 是在原有类的基础之上添加方法,在使用的时候只需要用原有类实例化出来的对象即可: 实际开发中什么情况下使用类目? 已经封装好的类,(不希望再改变原有类) 团队里面分工开发一个模块的时候可以使用自己定义的方法: 二.延展:(Extension)的基本概念和用法: 在xcode4.3之前直接使用self 调用方法  那时候会报错,所以的用延展 就是在类中添加私有方法,延展中声明的方法在类的本身的@interface  类名()和它对应的@end之间实现: 类有时需要方法

OC 类目、协议

类目:为现有的类添加新方法 1.需要添加该类的新方法,但是不能继承该类的情况下 类目使用需要注意的问题: 1.类目里面不能添加实例变量,但是类目可以声明属性,但必须实现set get 方法,在这两个实现方法里面依然不能使用自己添加的实例方法 2.类目里添加的方法不能和原类中的方法重名,否则会导致覆盖 3.一个类可以添加多个类目,但是类目名和方法名不能重复 4.类目中的方法可以成为原始类的一部分,和原始类方法级别相同,可以被子类继承 类目的创建与使用: File:是类目的名称 File Type: