Objective-C中的Protocol
来源:互联网 发布:十二宫杀手解析知乎 编辑:程序博客网 时间:2024/06/05 07:03
1.@protocol 代表一个协议
2.谁遵循协议,谁就要实现协议中定义的方法
3.协议文件本身只是提供方法的声明,并不实现方法
MiddleStudent.h
CarProtocol.h
2.谁遵循协议,谁就要实现协议中定义的方法
3.协议文件本身只是提供方法的声明,并不实现方法
4.协议本身也可以遵循其他协议,NSObject是一个基础协议,协议也可以同时遵循多个其他协议
main.m
#import <Foundation/Foundation.h>#import "Person.h"#import "MiddleStudent.h"int main(int argc, const char * argv[]){ @autoreleasepool { /* Person * p = [[Person alloc] init]; [p eat]; [p drink]; [p walk]; [p gamble]; MiddleStudent * st = [[MiddleStudent alloc] init]; [st eat]; [st listen]; */ //遵循协议的变量声明 //要求你创建的PErson对象必须是遵循了 PersonProtocol Person * p = [[Person alloc] init]; Person<PersonProtocol> * p2 = [[Person alloc] init]; [p2 walk]; id<PersonProtocol> obj = [[Person alloc] init]; } return 0;}
Person.h
<span style="font-size:18px;">#import <Foundation/Foundation.h>#import "LiuMangProtocol.h"#import "PersonProtocol.h"#import "Car.h"//一个类可以同时遵循多个协议@interface Person : NSObject <LiuMangProtocol,PersonProtocol>@property(nonatomic,strong) Car<CarProtocol> * car;@property(nonatomic,strong) id<CarProtocol> obj;@end</span>
Person.m
#import "Person.h"@implementation Person- (void)walk{ NSLog(@"正常人走路");}- (void)eat{ NSLog(@"吃鸡蛋不吐皮");}- (void)drink{ NSLog(@"流氓喝酒不给钱");}/*- (void)gamble{ NSLog(@"流氓赌博总是赢");}- (void)lie{ NSLog(@"流氓爱撒谎");}*/@end
PersonProtocol.h
#import <Foundation/Foundation.h>//那些通用的功能@protocol PersonProtocol <NSObject>- (void)walk;@end
LiuMangProtocol.h
#import <Foundation/Foundation.h>#import "StudentProtocol.h"//@protocol 代表一个协议//谁遵循协议,谁就要实现协议中定义的方法//协议文件本身只是提供方法的声明,并不实现方法//协议本身也可以遵循其他协议,NSObject是一个基础协议,协议也可以同时遵循多个其他协议@protocol LiuMangProtocol <NSObject,StudentProtocol>//协议的条文,就是方法@required//必须实现,默认都是必须实现的- (void)eat;- (void)drink;@optional //可选实现- (void)gamble;- (void)lie;@end
PersonProtocol.h
#import <Foundation/Foundation.h>//那些通用的功能@protocol PersonProtocol <NSObject>- (void)walk;@end
StudentProtocol.h
#import <Foundation/Foundation.h>@protocol StudentProtocol <NSObject>- (void)listen;- (void)write;@end
MiddleStudent.h
#import "Person.h"//不需要许多的类去遵守的协议,也就是一个类特有的协议我们可以把它直接在这个类的.h文件中直接声明出来@protocol MiddleStudentProtocol <NSObject>- (void)skipClass;@end//父类遵循了那些协议,子类同样遵循那些协议@interface MiddleStudent : Person <MiddleStudentProtocol>@end
MiddleStudent.m
#import "MiddleStudent.h"@implementation MiddleStudent- (void)listen{ NSLog(@"listen课");}- (void)skipClass{ }@end
CarProtocol.h
#import <Foundation/Foundation.h>@protocol CarProtocol <NSObject>- (void)run;@end
Car.h
#import <Foundation/Foundation.h>#import "CarProtocol.h"@interface Car : NSObject<CarProtocol>@end
Car.m
#import "Car.h"@implementation Car@end
0 0
- Objective-c中的 Protocol
- Objective-c中的protocol
- Objective-C中的Protocol
- Objective-C中的Protocol
- Objective-C中的协议Protocol
- Objective-C中的protocol用法
- objective-c中的正式协议 protocol
- 浅析Objective-C中的Protocol协议
- Protocol in Objective-C
- objective-c protocol
- Objective-c 协议(protocol)
- Objective C 协议(Protocol)
- Protocol in Objective-C
- Objective-C Protocol
- objective-c中protocol
- [Objective-C] Protocol 简介
- Protocol in Objective-C
- objective-c @protocol
- 查找无序数组中的第K个最小值[快排思想]
- centos pil
- 高效开发Android App的10个建议
- spring 自定义bean初始化及析构方法
- 技术人员硬实力和软实力
- Objective-C中的Protocol
- codevs1928 加密算法 数论[四星]
- 【HNOI2012】【BZOJ2732】射箭
- 解决android中软件盘弹出导致的控件位置问题
- C++学习——copy构造函数及浅拷贝和深拷贝
- qt creator 在linux系统加载动态连接库
- 解压
- 编码问题:unicode与utf-8,wchar_t与char
- Android 动画实践