OC的分类和协议

分类和协议是OC中比较显著的俩个特点。分类的功能主要是实现类的扩展,协议则常常用在代理的实现上。

1、分类的声明

在分类的接口文件中,只允许新增方法,不能新增变量。语法形式:

@interface 类名 (分类名)

新增的方法声明;

@end

2、定义方法

在分类的实现文件中,对新增方法进行定义,语法如下:

@implementation 类名 (分类名)

新增的方法的定义{

语句;

@end

3、方法调用

分类的方法声明和定义之后,就可以进行调用了,语法如下:

[对象名 新增方法名]

实例:

#import <Foundation/Foundation.h>

@interface student : NSObject{

int val;

}

@end

#import "student.h"

@interface student (pupil)

-(int)intval;

@end

#import "student+pupil.h"

@implementation student (pupil)

-(int)intval{

val=200;

return val;

}

@end

#import <Foundation/Foundation.h>

#import "student.h"

#import "student+pupil.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

student *stu=[[student alloc] init];

NSLog(@"%i",[stu intval]);

}

return 0;

}

输出结果:200

协议实际上是一组方法列表,它不依赖于特定的类。使用协议可以使不同的类共享相同的消息。

1、协议的定义

一个协议的定义是放在头文件中的,其语法如下:

@protocol 协议名

(@optional或@required)方法声明;

@end

一般在方法声明前面,有2个关键字进行修饰:@optional,表示声明的方法是可选的;@required表示声明的方法是必须的。默认是必须实现的。

2、协议在类中的声明

要在类中使用协议,首先要在类中进行协议的声明,语法如下:

@interface 类名:父类名 <协议名>

@end

3、实现

协议实现语法如下:

@implementation 类名 (分类名)

类和协议中的声明方法的实现{

语句;

@end

实例:

#import <Foundation/Foundation.h>

@protocol protocalcc <NSObject>

-(void)go;

@end

#import <Foundation/Foundation.h>

#import "protocalcc.h"

@interface student : NSObject<protocalcc>

@end

#import "student.h"

@implementation student

-(void)go{

NSLog(@"go student");

}

@end

#import <Foundation/Foundation.h>

#import "student.h"

#import "student+pupil.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

student *stu=[[student alloc] init];

[stu go];

}

return 0;

}

输出结果:go student

在此程序中用到了协议继承,即协议2使用了协议1,语法如下:

@protocol 协议名2 <协议名1>

(@optional或@required)方法声明;

@end

在OC中,默认为创建的协议都是在协议中使用协议,协议名1为NSObject,语法如下:

@protocol 协议名 <NSObject>

(@optional或@required)方法声明;

@end

具有多个协议的使用

在大多数情况下,一个类中是可以使用多个协议的,@interface 类名:父类名<协议1,协议2,...协议n>

时间: 2024-12-18 18:45:57

OC的分类和协议的相关文章

oc中分类 扩展 协议的使用及区别

一.分类 1.适用范围 当你已经封装好了一个类(也可能是系统类.第三方库),不想在改动这个类了,可是随着程序功能的增加需要在类中增加一个方法,这时我们不必修改主类,只需要给你原来的类增加一个分类. 将一个大型的类拆分成不同的分类,在不同分类中实现类别声明的方法,这样可以将一个类的实现写到多个.m文件中,方便管理和协同开发. 分类中的方法可以只声明,不实现,所以在协议不支持可选方法的时候(协议现在已经支持可选方法),通常把分类作为非正式协议使用. 2.语法格式 文件中的语法 @interface

OC基础--分类(category) 和 协议(protocol)

OC 中的category分类文件相当于 C#中的部分类:OC 中的protocol协议文件(本质是头文件)相当于 C#中的接口.今天就简单说明一下OC中的这两个文件. 由于视频中的Xcode版本低,导致了分类文件和协议文件没有找到,最后百度得知: 如图:Xcode 7.2版本中的category文件和protocol文件都归类到了Objective-C File 中   一.category文件: 作用:可以扩展自定义类,或者系统类.下面的实例,是扩展了NSString 类,在类中扩展了计算字

OC分类和协议

// //  ViewController.m //  OC11分类和协议 // //  Created by Zoujie on 15/9/13. //  Copyright (c) 2015年 Zoujie. All rights reserved. // #import "ViewController.h" #import "Fraction.h" #import "GraphicObject.h" @interface ViewContr

OC学习篇之---协议的概念和用法

这一篇文章我们在来看一下OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习Java中的接口时候,看可以知道其实接口就相当于一种契约(协议),给他的实现类打上标记了,当然这个活在Java5.0之后,被注解替代了,因为注解就是为了此功能诞生的. 协议就是定义了一组方法,然后让其他类去实现 下面来看代码: WithProtocol.h [objc] vi

OC基础 代理和协议

OC基础 代理和协议 1.协议 (1)oc语言中得协议:一组方法列表,不需要我们自己实现,由遵守协议的类来实现协议所定制的方法. (2)协议的使用步骤:制定协议-->遵守协议-->实现协议-->调用协议. (3)协议声明的关键字: (a)@required,必须实现,不实现的话在.m文件内会报警告. (b)@optional,可选实现,不实现的话在.m文件内也不会报警告. (4)协议和继承的区别: (a)相同之处:都可以规范统一类中的方法. (b)不同之处:继承的子类不需要再实现一遍父类

OC的分类

1 分类就是类的补充和扩展,本质上是类的一部分,把一个类分成若干部分,每个部分就是分类. 2 语法 * 文件中的语法@interface 主类类名(分类类名) * 文件名通常为:主类名+分类名 * 调用方法时,只需要向主类引用放送消息即可 3 使用分类的方式 * 可以给一个类增加功能(增加方法) * 将类分成若干部分 * 分类不但可以给自定义的类添加功能,还可以给不知道源代码的类添加功能.比如NSString添加一个具体网络访问功能(访问服务器) * 在分类中,不可以定义实例变量,也不可以定义属

李洪强iOS开发之OC语言BLOCK和协议

OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么? 苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似性: (1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. 标识符 ^ (二)基本使用 (1)定义BLOCK变量 Int (^SumBlock)(int,int);//有参数,返回值类型为int Void (^MyBlock)()://无参数,返回值类型为空 (2)利用block封装代

(转载)OC学习篇之---协议的概念和用法

在前一篇文章中我们介绍了OC中类的延展,这一篇文章我们在来看一下OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习Java中的接口时候,看可以知道其实接口就相当于一种契约(协议),给他的实现类打上标记了,当然这个活在Java5.0之后,被注解替代了,因为注解就是为了此功能诞生的. 协议就是定义了一组方法,然后让其他类去实现. 下面来看代码: Wit

OC category (分类,类目),日期类常用用法

学了这么久OC我们都知道OC中的类分为系统类和自定义的类,当我们在使用系统为我们提供的类时有时往往不能满足我们的需要,例如,字符串NSString类提供了比较字符串的方法compare,为数组排序时系统默认的是升序,当需要为数组按降序排序时,一种途径是需要新建一个类写一个降序的方法,而另一个途径就是系统提供的category(分类,类目),分类(类目,category)的目的为了给没有源代码的类添加方法(只能添加方法,不能添加实例变量),是扩充一个类功能的方式之一,为原有类扩充的方法会成为原类的