Objective-c协议
来源:互联网 发布:粤语学软件哪个好 编辑:程序博客网 时间:2024/06/05 10:01
协议的概述
当定义类时,经常需要一些方法来描述类的行为,有时候这些方法需要被多个类所使用,具体在不同类中实现的方法也无法确定,这时便可以使用协议。着类似于c++的多重继承和java的接口,协议是最常见的代理模式。
协议是一系列方法的声明列表,只要某个类遵守这个协议,就可以使用协议中的方法。语法格式如下
@protocol 协议名称
方法声明
@end
示例:
#import <Foundation/Foundation.h>@protocol Myprotocol <NSObject>-(void)eat;-(void)run;@end
协议的创建方法与分类类似,只需要在file type选项选择protocol
协议的使用
@required和@optional
@required:这个关键字标记的方法必须要实现,否则编译器会发出警告但是不影响编译,它是默认的
@optional:可以不实现
#import <Foundation/Foundation.h>@protocol Myprotocol <NSObject>-(void)eat;@optional //表示run方法可以不实现-(void)run;@end
使用协议
//.h#import <Foundation/Foundation.h>#import "Myprotocol.h"@interface Person : NSObject<Myprotocol>@end//.m
#import "Person.h"@implementation Person-(void)eat{//其中实现功能代码}-(void)run{}@end
#import "Person.h"@interface Person() <Myprotocol>@end@implementation Person-(void)eat{}-(void)run{}@end
一个协议可以遵循其他协议(一个或多个)。就能拥有其他协议的方法
@protocol Myprotocol <FristProtocol,LastProtocol>@end
代理
oc中,代理模式是一种常见的设计模式。代理就是某些自己不能亲自完成的事情,让他人帮忙完成。例如:老板需要出差,但是没时间购买机票,就让助手帮忙购买机票:
#import <Foundation/Foundation.h>//声明助手类,帮助老板查询余票和价格@interface Assistant : NSObject-(int)selectTicketNumber;-(int)selectTicketPrice;@end--------------------------#import "Assistant.h"@implementation Assistant-(int)selectTicketNumber{ return 100;}-(int)selectTicketPrice{ return 900;}@end
#import <Foundation/Foundation.h>@class Assistant;@interface Boss : NSObject//买机票的方法-(void)payTicket;//声明一个叫张三的助手@property (nonatomic,strong)Assistant *zhangSan;@end------------------#import "Boss.h"#import "Assistant.h"@implementation Boss-(void)payTicket{ int num = [_zhangSan selectTicketNumber]; int price =[_zhangSan selectTicketPrice]; NSLog(@"余票还有%d张,票价%d",num,price); }@end
#import <Foundation/Foundation.h>#import "Boss.h"#import "Assistant.h"int main(int argc, const char * argv[]) { @autoreleasepool { Boss *b = [[Boss alloc]init]; Assistant *zhangSan =[[Assistant alloc]init]; b.zhangSan = zhangSan; b.payTicket; } return 0;}输出结果:余票还有100张,票价900
如果不在使用张三做代理,而使用其他人,就需要创建其他人的类,比较麻烦,由此可以使用代理来改进:
#import <Foundation/Foundation.h>@class Assistant;#import "TicketProtocol.h"@interface Boss : NSObject//买机票的方法-(void)payTicket;//声明一个遵循TicketProtocol的助手对象@property (nonatomic,weak)id<TicketProtocol> delegate;@end
#import <Foundation/Foundation.h>@protocol TicketProtocol <NSObject>-(int)selectTicketNumber;-(int)selectTicketPrice;@end
0 0
- objective-c协议
- Objective-c 协议(protocol)
- Objective C 协议(Protocol)
- Objective-C 协议详解
- Objective-c之协议
- objective-c协议 委托
- Objective-c中的协议
- Objective C协议
- Objective-c协议
- Objective - C 委托/协议
- Objective-C 中协议
- objective-c协议作用
- Objective-C 协议
- Objective-C 协议 protocol
- Objective-c协议
- Objective-c - 非正式协议
- Objective-C 协议(protorcol)
- objective-c 协议和委托
- yii2.0验证码不能随网页一起刷新/出现site/captcha的错误
- malloc、realloc、calloc
- 语音信号的短时语音能量
- CSS样式
- mysql到pandas记录
- Objective-c协议
- 基于Spring Boot和Spring Cloud实现微服务架构学习(二)-Spring Boot总结
- 强大的js事件委托
- greenDao的最后总结实战
- fork与vfork 的研究
- ThinkPHP 3.2.3 后台模板引入
- Apache Solr入门教程(初学者之旅)
- #include< >和#include""的区别
- WCF学习与实践——基础知识