博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【语法】协议
阅读量:6388 次
发布时间:2019-06-23

本文共 2757 字,大约阅读时间需要 9 分钟。

协议

什么是协议

  1.协议是多个对象之间协商的一个接口对象。

  2.协议提供一系列方法用来在协议的实现者和代理者之间的一种通信方式

  3.协议类似于c++中的纯虚函数,或者Java中的接口。

 

 协议声明【放在.h文件中】                                                                               

@protocol MyProtocol<NSObject>   //MyProtocol 是协议的名字        <NSObject>是继承的一个基协议

//要定义的变量

-(void)init;

-(int)update:(int)time;

@end

      

 

@required  某一个方法必须得实现

@optional 某一个方法可以不实现

协议可以多继承

【例如】

@protocol MyProtocol
//要定义的变量@optional //这里定义的方法可以不实现-(void)init;-(void)exit;@required //这里定义的方法必须实现-(int)update:(int)time;@end

 

       

 

        

        

       

    如上的<MyProtocol>表示一个泛型

    test是一个对象

    [MyTest alloc]是一个类

 

 

【协议的实例】

【1】.首先先创建一个协议 Objective-C protocol

////  MyProtocol.h//  pro6////  Created by 裴烨烽 on 14-1-24.//  Copyright (c) 2014年 裴烨烽. All rights reserved.//#import 
@protocol MyProtocol
@optional //可选的-(void)print:(int)value;@required-(int)printValue:(int)value1 andValue:(int)value2;//printValue:andValue:这个方法是必须要实现的@end

 

【2】.h方法里面声明协议

////  MyTest.h//  pro6////  Created by 裴烨烽 on 14-1-24.//  Copyright (c) 2014年 裴烨烽. All rights reserved.//#import 
#import "MyProtocol.h" //调用.h@interface MyTest : NSObject
-(void)showInfo;@end

【3】.m文件里面写方法

////  MyTest.m//  pro6////  Created by 裴烨烽 on 14-1-24.//  Copyright (c) 2014年 裴烨烽. All rights reserved.//#import "MyTest.h"@implementation MyTest-(void)showInfo{    NSLog(@"show info is calling");}//下面这 2个方法是来源于MyProtocol协议-(int)printValue:(int)value1 andValue:(int)value2{    NSLog(@"print value value1 %d value2 %d",value1,value2);    return 0;}-(void)print:(int)value             【1】{NSLog(@"print value %d",value);      【2】}@end

 

【4】main()

////  main.m//  pro6////  Created by 裴烨烽 on 14-1-24.//  Copyright (c) 2014年 裴烨烽. All rights reserved.//#import 
#import "MyTest.h"#import "MyProtocol.h"int main(int argc, const char * argv[]){ @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); MyTest *myTest=[[MyTest alloc]init]; [myTest showInfo]; SEL sel=@selector(print:); 【3】 //这个print:转化成SEL类型的方法 if([myTest respondsToSelector:sel]){ 【4】 //判断myTest是否响应sel方法(print:) [myTest print:20]; 【5】 } [myTest print:20]; //如果在上面的.m文件里面的【1】【2】方法,也就是.h里面@optional(可以不实现)不写(注释掉),那么这句话写在这里就会出错,错误提示,没有写。那么就得用上面的方法【3】+【4】+【5】 [myTest printValue:10 andValue:20]; //[myTest release]; //用协议方式 id
myProtocol=[[MyTest alloc] init]; if([myProtocol respondsToSelector:@selector(print:)]) { [myProtocol print:102]; } [myProtocol printValue:103 andValue:105]; // [myProtocol release]; } return 0;}

 

 

 

 

 

转载于:https://www.cnblogs.com/madeininfi/p/3532934.html

你可能感兴趣的文章
3分钟搭建Ant Design Pro前端开发环境( MyClouds的前端选型)
查看>>
Scala各种用法
查看>>
Linux系统常用命令(二)
查看>>
简单的工厂模式学习
查看>>
记录一个razor视图引擎中的小问题
查看>>
温习如何画E-R图
查看>>
eclispe注释模板
查看>>
Thymeleaf教程 (三) 创建一个多语言的首页
查看>>
OSChina 周六乱弹 ——你们猜狗的舌头有多长
查看>>
OSChina 周日乱弹 —— 爱丽丝爱吃京酱肉丝
查看>>
python3.6 取余运算
查看>>
2018.11月微信小程序优质开源项目
查看>>
IOS 未来几年的认知
查看>>
解决中文乱码--加密
查看>>
浅析全民社交创业梦
查看>>
Java操纵MongoDB_1(环境设置)
查看>>
C#字符串操作--获取字符或字符串的位置、数量
查看>>
php - 字符串处理
查看>>
bulk collect 以及ref cursor使用
查看>>
男女都应该学会的潜规则(二)
查看>>