- //
- // main.m
- // protocol的使用
- //
- // protocol的实质是对于一些方法的声明,只是声明!!
- // 其中的方法声明主要有两种
- // @required 必须实现的方法,不实现会警告
- // @optional 可以选择去实现,但是不实现的方法不要去调用
- // 遵循某一protocol的类即拥有了全部的声明
- // protocol不可以定义变量,也不可以使用@property
- // 协议的写的位置:
- // 在父类后,<>内写协议名
- // 一个类可以遵循多个协议,协议名之间用逗号分割
- // 遵循协议的父类的继承问题
- // 子类直接遵循父类遵循的协议并且继承父类实现的协议方法
- // 遵循协议的协议---协议名后<>
- // 协议的声明,若协议定义在引用后需要提前声明
- // 协议的声明--@protocol 协议名;
- // 内部协议---不单独成为一个文件,在只想让一个协议或者一个类去遵循时使用
- // 另外的用法
- // 用于接收遵循某协议的变量比如
- // @property <Protocol1> NSString* name;
- // 代表这个name属性所在的NSString类必须遵循Protocol1协议
- #import <Foundation/Foundation.h>
- #import "Name.h"
- #import "Person.h"
- #import "Student.h"
- #import "Protocol1.h"
- #import "protocol2.h"
- int main(int argc, const char * argv[]) {
- Person* per=[[Person alloc] init];
- [per test1];
- //[per test3]未实现的方法
- [per test2];
- [per run];
- Student* stu=[[Student alloc] init];
- [stu eat];//继承自父类
- [stu sleepWithTime:8];//带参协议方法实验
- [stu study];
- // NSString* nama=@"luoye";
- // per.name=nama; nama的类NSString不遵循协议,不能这么赋值
- Name* name=@"luoye";
- per.name=name;
- NSLog(@"%@",per.name);
- return 0;
- }
复制代码- #import "Person.h"
- @protocol Protocol4;
- @interface Student : Person <Protocol4>
- @end
- @protocol Protocol4 <NSObject>
- -(void)study;
- @end
复制代码
#import "Student.h"
@implementation Student
-(void)study{
NSLog(@"子类继承新协议");
}
@end
- #import <Foundation/Foundation.h>
- #import "Protocol1.h"
- @interface Name : NSString <Protocol1>
- @end
复制代码- #import "Name.h"
- @implementation Name
- -(void)test1{
- NSLog(@"协议中test1方法执行了");
- }
- -(void)test2{
- NSLog(@"协议中test2方法执行了");
- }
- @end
复制代码- #import <Foundation/Foundation.h>
- #import "Protocol1.h"
- #import "protocol2.h"
- @interface Person : NSObject <Protocol1,protocol2>
- @property (nonatomic,strong) id <Protocol1> name;
- @end
复制代码
#import "Person.h"
@implementation Person
-(void)test1{
NSLog(@"协议中test1方法执行了");
}
-(void)test2{
NSLog(@"协议中test2方法执行了");
}
//有多少个协议方法是required修饰的,就必须有实现几个
//optional的方法如果不实现不能调用,否则GG
-(void)run{
NSLog(@"速度70迈");
}
-(void)eat{
NSLog(@"吃饭是幸福的");
}
-(void)sleepWithTime:(int)a{
NSLog(@"睡个觉,一共%d小时",a);
}
@end
#import <Foundation/Foundation.h>
@protocol protocol3;//提前声明,因为定义在遵循前
@protocol protocol2 <protocol3>
-(void)run;
-(void)eat;
@end
@protocol protocol3 <NSObject>
-(void)sleepWithTime:(int)a;
@end
#import <Foundation/Foundation.h>
@protocol Protocol1 <NSObject>//这里是协议遵循其他协议
//这里不可以定义属性,也不可以使用@property,只是声明方法
//方法默认@required
-(void)test1;//与test2都是@required
@required
-(void)test2;
@optional
-(void)test3;
@end
这是protocol的用法细节代码 |