Objective-C 协议
2015-12-18 11:03
387 查看
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类里必须有一个实现这个方法,如果都没有实现,则运行的时候会出现报错。
正式协议相当于自定义一个协议让其它的类来遵守(实现).
例如: 如果你写一个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类里必须有一个实现这个方法,如果都没有实现,则运行的时候会出现报错。
相关文章推荐
- Objective-C_语言_NSDate(时间类型)和NSCalendar(日历)NSTimeZone(时区)
- Objective-C 编码建议(编程习惯,规范)
- com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1问题出现的原因及解决办法
- 启动服务器时出现异常:com/opensymphony/xwork2/spring/SpringObjectFactory.java:209:-1 :
- Swift项目兼容Objective-C问题汇总
- 设备模型的基础---kobject,kset
- Objective-c NSRange用法及和NSString的关系
- POJ3241 Object Clustering 曼哈顿最小生成树
- html中object标签详解
- OBJECT和EMBED标签
- GsonWithoutObject 没有对象(脱离对象) 直接提取 ... gson json
- 冒泡排序的两个例子(objective-c)
- Objective-c语言_练习题3
- Objective-C中的内存管理
- Objective--C UISegmentedControl 交通灯
- Object-c学习笔记
- Objective--C Slider实现三原色之间颜色变化
- Objective--C UIControl 简易本地音频播放器
- Java基础--面向对象(多态、Object类)
- 翻译:采用现代Objective-C