IOS之学习笔记十四(协议的定义和实现)

简介: IOS之学习笔记十四(协议的定义和实现)

1、正式协议的定义

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

{

   零个到多个方法定义

}

一个协议可以有多个直接父协议,但协议只能继承协议,不能继承类


协议只有方法签名,没有方法实现


2、实现协议

@interface 类名 : 父类 <协议1,协议2…>

@end


协议和java里面的接口差不多


如果要使用协议定义变量,有如下两种语法


NSObject<协议1,协议2>*变量;


id<协议1,协议2> 变量;


@optional关键字之后声明的方法可选实现


@required关键字之后声明的方法必选实现


3、测试Demo

1)、FirstProtocol.h

#ifndef FirstProtocol_h

#define FirstProtocol_h

@protocol FirstProtocol

-(void)first;

@end

#endif /* FirstProtocol_h */


2)、SecondProtocol.h

#ifndef SecondProtocol_h

#define SecondProtocol_h

@protocol SecondProtocol

-(void)second;

@end

#endif /* SecondProtocol_h */


3)、ThirdProtocol.h

#import "FirstProtocol.h"

#import "SecondProtocol.h"

#ifndef ThirdProtocol_h

#define ThirdProtocol_h

@protocol ThirdProtocol <FirstProtocol, SecondProtocol>

-(void)third;

@end

#endif /* ThirdProtocol_h */


4)、DoProtocol.h

#import <Foundation/Foundation.h>

#import "ThirdProtocol.h"

#ifndef DoProtocol_h

#define DoProtocol_h

@interface DoProtocol : NSObject <ThirdProtocol>

@end

#endif /* DoProtocol_h */


5)、DoProtocol.m

#import <Foundation/Foundation.h>

#import "DoProtocol.h"

@implementation DoProtocol

-(void)first

{

   NSLog(@"this first method");

}

-(void)second

{

   NSLog(@"this second method");

}

-(void)third

{

   NSLog(@"this third method");

}

@end


6)、main.m

#import "DoProtocol.h"

#import "ThirdProtocol.h"

#import "FirstProtocol.h"

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

   @autoreleasepool {

       DoProtocol *protocal = [DoProtocol new];

       [protocal first];

       [protocal second];

       [protocal third];

     

       NSObject<FirstProtocol> *first = [[DoProtocol alloc] init];

       [first first];

 

       id<SecondProtocol> second = [[DoProtocol alloc] init];

       [second second];

   }

}


4、运行结果

this first method

this second method

this third method

this first method

this second method

 


相关文章
|
2月前
|
Swift iOS开发
6-7|IOS如何定义一个类
6-7|IOS如何定义一个类
|
安全 数据安全/隐私保护 iOS开发
iOS小技能:【发红包】使用tweak和lua脚本结合进行实现
我们开发的大部分越狱程序,都是编译成动态链接库(`例如:介绍的越狱程序(Tweak)开发,就是动态链接库。`),然后通过越狱平台的MobileSubstrate(iOS7上叫CydiaSubstrate)来加载进入目标程序(Target),通过对目标程序的挂钩(Hook),来实现相应的功能。
341 0
|
编解码 iOS开发 流计算
调用Live555接收RTSP直播流,转换为Http Live Streaming(iOS直播)协议
调用Live555接收RTSP直播流,转换为Http Live Streaming(iOS直播)协议
502 1
|
XML JSON 编解码
IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf
接上篇《金蝶随手记团队的Protobuf应用实践(原理篇)》,本文将以iOS端的Objective-C代码为例,图文并茂地向您菔救绾卧趇OS工程中快速使用Protobuf,希望对你有帮助。
176 0
IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf
|
Android开发 iOS开发
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
415 0
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
|
存储 安全 iOS开发
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
473 0
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
|
Swift 数据安全/隐私保护 iOS开发
iOS开发 - swift通过Alamofire实现https通信
iOS开发 - swift通过Alamofire实现https通信
436 0
iOS开发 - swift通过Alamofire实现https通信
|
开发者 iOS开发
iOS开发 - 用AFNetworking实现https单向验证,双向验证
iOS开发 - 用AFNetworking实现https单向验证,双向验证
427 0
iOS开发 - 用AFNetworking实现https单向验证,双向验证
|
iOS开发
iOS小技能:自动布局实现兄弟控件N等分且宽高比例是1:N(xib 上实现)
本文为 iOS视图约束专题的第三篇:xib上使用自动布局教程
182 0
|
Linux iOS开发 开发者
实现在windows、linux下上传ios app到App Store
实现在windows、linux下上传ios app到App Store
实现在windows、linux下上传ios app到App Store