OC-035.协议
来源:互联网 发布:matlab模拟退火算法 编辑:程序博客网 时间:2024/06/07 05:31
协议:对象之间一种约定
只有方法声明没有方法实现一种类型
定义一个协议:
1.@protocol 协议名称 <NSObject> 开头
2.@end 结尾
@required 表示遵守这个协议的类必须实现方法(默认) 翻译:需要
@optional 表示可选的,遵守这个协议的类可以不实现的方法 翻译:可选
让类遵守协议
@interface 类名 : NSObject <协议名称>
一个类可以遵守多个协议
一个协议可以被多个类遵守
一个协议也可以遵守多个协议
通过id<协议名称> 定义出来的指针,只能指向实现这个协议的类的实例对象,有多态的特性
只有方法声明没有方法实现一种类型
定义一个协议:
1.@protocol 协议名称 <NSObject> 开头
2.@end 结尾
@required 表示遵守这个协议的类必须实现方法(默认) 翻译:需要
@optional 表示可选的,遵守这个协议的类可以不实现的方法 翻译:可选
让类遵守协议
@interface 类名 : NSObject <协议名称>
一个类可以遵守多个协议
一个协议可以被多个类遵守
一个协议也可以遵守多个协议
通过id<协议名称> 定义出来的指针,只能指向实现这个协议的类的实例对象,有多态的特性
它指向任意的实现这个协议的类的实例对象
#import <Foundation/Foundation.h>//------main#import "LSMe.h"#import "LSIpad.h"#import "LSIphone.h"#import "LSIpod.h"int main(int argc, const char * argv[]) { @autoreleasepool { LSMe *me = [[LSMe alloc] init]; [me callToMum]; [me playGame]; LSIpad *ipad = [[LSIpad alloc] init]; LSIpod *ipod = [[LSIpod alloc] init]; LSIphone *iphone = [[LSIphone alloc] init]; // me.apple = ipod;不能用id<play>去指向没有遵守这个协议的对象 me.apple = ipad; //指向ipad [me playWithApple];//ipad 玩游戏 me.apple = iphone;//指向iphone [me playWithApple];//iphone 玩游戏 me.appleNew = ipod;//如果id后面不加协议,是可以指向ipod的 [me playWithAppleNew]; } return 0;}
#import <Foundation/Foundation.h>//------call.h/* @protocol 开头 @end 结尾 @required 表示遵守这个协议的类必须实现方法(默认) 翻译:需要 @optional 表示可选的,遵守这个协议的类可以不实现的方法 翻译:可选 */@protocol call <NSObject> //任何协议首先都是遵守基协议的@required //在类中必须实现的- (void) callToMum;@optional- (void) callToDad;@end
#import <Foundation/Foundation.h>//------play.h@protocol play <NSObject>- (void) playGame;@end
#import <Foundation/Foundation.h>//------LSme.h//#import "call.h" //导入协议文件//#import "play.h" //一个类可以遵守多个协议、一个协议可以被多个类遵守#import "all.h"@interface LSMe : NSObject <all>//通过id<协议名称> 定义出来的指针,只能指向实现这个协议的类的实例对象,有多态的特性//它指向任意的实现这个协议的类的实例对象//如果这个id指向的不是遵守这个协议的对象,那么程序会崩溃@property (nonatomic,strong) id<play> apple;@property (nonatomic,strong) id appleNew;//如果id后面不加协议,是可以指向ipod的-(void) playWithApple;-(void) playWithAppleNew;@end
#import "LSMe.h"//------LSMe.m@implementation LSMe- (void) callToMum{ NSLog(@"%s",__func__);}- (void) callToDad{ //这个方法可以不实现 NSLog(@"%s",__func__);}-(void)playGame{ NSLog(@"%s",__func__);}-(void) playWithApple{ [self.apple playGame]; }-(void) playWithAppleNew{ [self.appleNew playGame];}@end
#import <Foundation/Foundation.h>//------LSIpad.h#import "play.h"@interface LSIpad : NSObject <play>@end
#import "LSIpad.h"//------LSIpad.m@implementation LSIpad-(void)playGame{ NSLog(@"%s",__func__);}@end
#import <Foundation/Foundation.h>//------LSIphone.h#import "play.h"@interface LSIphone : NSObject <play>@end
#import "LSIphone.h"//------LSIphone.m@implementation LSIphone-(void)playGame{ NSLog(@"%s",__func__);}@end
#import <Foundation/Foundation.h>//------LSIpod.h@interface LSIpod : NSObject-(void)playGame;@end
#import "LSIpod.h"//------LSIpod.m@implementation LSIpod-(void)playGame{ NSLog(@"%s",__func__);}@end
#import <Foundation/Foundation.h>//------all.h 协议#import "call.h"#import "play.h"//一个协议可以同时遵守多个协议@protocol all <call,play>@end
0 0
- OC-035.协议
- OC协议
- oc 协议
- oc 协议
- OC协议
- OC 协议
- oc ------协议
- oc协议
- OC-协议
- OC协议
- OC-协议
- OC学习:OC中的协议
- OC之【@protocol协议】
- 7、协议protocol-OC
- 7、OC Protocol协议
- OC中的协议
- OC协议 委托
- oc协议,延展,分类
- [Chromium学习笔记]了解Chromium的基础知识
- python操作mysql数据库
- hdu1969 Pie (二分)
- IOS-45-登录页面相关设置之手机号(只显示数字键盘、只允许输入数字、只允许输11位数)
- Gethibernatetemplate的find方法大全
- OC-035.协议
- 关于win10能上qq不能联网的问题解决方案之一
- HYSBZ - 1036 树的统计
- C语言实现线性顺序链表
- jQuery选择器总结
- 由动态库文件dll生成lib库文件
- ClassLoader和双亲委派机制
- JS中获取节点的兄弟、父、子节点的各种问题
- Spring Data JPA