打开Xcode->选择IOS->Application->Single View Application->然后按next
2.如果你创建了工程那快捷键(com-shift-N)->选择IOS->Application->Single View Application->然后按next
在工程项下个找到ViewController.m文件
#import "ViewController.h"
#import "Student.h"
#import "Walter.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
/*
我们之前讲过非正式协议(NSObject的类目),那么肯定还有正式协议
在OC中,一个类可以实现多个协议,通过协议可以弥补单继承的缺点,但协议跟继承不一样的,协议只是一个方法
列表,方法的实现的靠遵循该协议的类取完成。
协议:协议是一套标准,这个标准里面声明了很多方法,但是不关心具体这些方法是怎么实现的
,具体的实现是由遵循这个协议的类取完成的。
通过协议实现:送外卖的东西,两个类一个学生,送餐员,有一个协议里面有sendfound 忙得话送餐 不忙就不送餐
*/
Student *student=[Student new];
Walter *waiter=[Walter new];
if ([waiter conformsToProtocol:@protocol(FoodProtocol)])
{
NSLog(@"waiter confotms FoodProtocol");
//判断是否遵循这个协议
}
// student.flag=YES;
student.delegate=waiter;
//把对象给他 把遵循协议的waiter赋给student对象给里面的delegate
student.flag=YES;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
#import <Foundation/Foundation.h>
//协议 正式协议
@protocol FoodProtocol <NSObject>
/*
在方法声明时,可以有两个关键字去限制是否必须让循序该协议的类去实现此方法
@required 标注的敌方为必须实现的方法
@optional 标注的方法可以选择实现(可以实现也可以不实现)
*/
//-(void)sendFood:(BOOL)flag;
@required
-(void)sendFood:(BOOL)flag;
@optional
-(void)sayHello;
@end
@interface Student : NSObject
@property (nonatomic,assign)BOOL flag;
@property (nonatomic,assign)id<FoodProtocol> delegate;//声明一个必须实现的对象
//delegate要实现@required里面的对象
@end
Student.m
#import "Student.h"
@implementation Student
//重写设置器
//flag
-(void)setFlag:(BOOL)flag
{
_flag=flag;
//如果代理存在就实现某个方法
//self.delegate代理是否存在
//- (BOOL)conformsToProtocol:(Protocol *)aProtocol;去顶某个方法是否实现了某个协议
/*
self.delegate是否遵循某个协议->confotmsTotocol什么协议->遵循了这个协议就执行sendFood方法
*/
if (self.delegate && [self.delegate conformsToProtocol:@protocol(FoodProtocol)])
{
[self.delegate sendFood:_flag];
}
else
{
NSLog(@"代理不存在");
}
}
@end
===============================================================================Walter.h
#import <Foundation/Foundation.h>
#import "Student.h"
//为什么有导入学生类似为了(遵循协议)这个协议在学生里面
//跟学生达成协议才可以送餐
@interface Walter : NSObject <FoodProtocol>
@end
====================================================================================Walter.m
#import "Walter.h"
@implementation Walter
-(void)sendFood:(BOOL)flag
{
//flag忙于不忙
if (false)
{
NSLog(@"学员忙,我们来送餐");
}
else
{
NSLog(@"学员不忙,我们不送餐");
}
}
@end