Objective-C 正式协议
正式协议相当于自定义一个协议让其它的类来遵守(实现).
例如: 如果你写一个Tableview,而且有数据,如果你想实现把这些数据在Tableviews上实现,你就必须遵守UITableViewDataSource. UItableviewdelegate这个协议就是说谁要做 uitableview 的代理就必须实现这个协议.
定义正式协议的语法如下
@protocol 协议名 <父协议1,父协议2>
{
零个到多个方法定义…
}
语法详细说明:
1: 协议名应与类名采用相同的命名规则,即如果仅从语法角度来看,协议名只要是合法的标示符即可;如果要遵守Objective-C可读性规范,则协议名应由多个
有意义的单词连接而成,每个单词首字母大写,单词与单词之间无须
任何分隔符。
2:一个协议可以有多个直接父协议,但协议只能继承协议,不能继承类。
3:协议中定义的方法只有方法签名,没有方法实现,协议中包含的方法既可是类方法,也可是实例方法。
#import <Foundation/Foundation.h>
@protocol Zm <NSObject>
@optional
- (void) Output;
- (void) addData;
@end
@interface Zm : NSObject
@end
#import <Foundation/Foundation.h>
@protocol Zp <NSObject>
- (void) getProduceTime;
@end
@interface Zp : NSObject
@end
#import <Foundation/Foundation.h>
#import "Zp.h"
#import "Zm.h"
@protocol Zk <Zp,Zm>
- (void)printColor;
@end
@interface Zk : NSObject
@end
#import <Foundation/Foundation.h>
#import "Zk.h"
@interface Fk : NSObject <Zk>
@end
#import "Fk.h"
@implementation Fk
-(void) Output
{
NSLog(@"调用output函数");
}
-(void)printColor{
NSLog(@"调用printColor");
}
-(void)getProduceTime{
NSLog(@"调用getProduceTime");
}
@end
#import <Foundation/Foundation.h>
#import "Fk.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Fk *fkk = [[Fk alloc]init];
[fkk Output];
[fkk getProduceTime];
[fkk printColor];
}
return 0;
}
Objective-C 协议:
非正式协议
理论和代码结合理解更好。
首先建一个分类
在File里面写上你的分类名字
例如Eatable
然后我们可以进行非正式协议的创建了
在分类里写一个方法
#import <Foundation/Foundation.h>
@interface NSObject(Eatable)
-(void)test;
@end
然后再创建一个继承NSObject的类yyq,yyq类能实现分类里的方法
在main函数中调用这个方法。
yyq *app = [[yyq alloc] init];
[app test];
注意: 分类里或者yyq类里必须有一个实现这个方法,如果都没有实现,则运行的时候会出现报错。
欢迎指正错误,相互学习,欢迎加入IT技术学习交流群:554587323