pragma mark 代理设计模式练习及规范
pragma mark 概念
/**
协议的编写规范:
1. 一般情况下, 当前协议属于谁, 我们就将协议 定义都谁的头文件中
2. 协议的名称 一般以它属于的那个类 的类名开头,后面跟上Protocol或者Delegate
3. 协议中的方法名称 一般以协议的名称(方法) protocol之前的作为开头, 后面跟上该方法的用途的名称
4. 一般情况下 协议中的方法 会将触发 该协议的对象传递出去
5. 一般情况下 一个类中的代理属性的名称 叫做 delegate
6. 当某一个类 成为另外一个类的代理的时候,
一般情况下在.h中 用 @protocol 协议名称; 告诉当前类 这是一个协议
在.m中 用 #impert 真正的导入一个协议的声明
*/
pragma mark 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Student.h"
#import "LinkHome.h"
#import "LoveHome.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
#warning 用代理实现 学生找房子, 学生不具备找房子的能力
/**
所以学生可以找另一个对象来帮它找房子, 那么另一个对象就是学生的代理
*/
Student *stu = [Student new];
LinkHome *lh = [LinkHome new];
stu.delegate = lh; // 帮学生找房子的 是链家 这个代理
// LoveHome *lh = [LoveHome new];
// stu.delegate = lh; // 帮学生找房子的 是我爱我家 这个代理
[stu findHourse];
return 0;
}
协议
StudentProtocol.h
// 帮学生找房子
- (void)studentFindHourse;
Student.h //学生类
#import <Foundation/Foundation.h>
//#import "StudentProtocol.h"
/**
协议的编写规范:
1. 一般情况下, 当前协议属于谁, 我们就将协议 定义都谁的头文件中
2. 协议的名称 一般以它属于的那个类 的类名开头,后面跟上Protocol或者Delegate
3. 协议中的方法名称 一般以协议的名称(方法) protocol之前的作为开头, 后面跟上该方法的用途的名称
4. 一般情况下 协议中的方法 会将触发 该协议的对象传递出去
5. 一般情况下 一个类中的代理属性的名称 叫做 delegate
6. 当某一个类 成为另外一个类的代理的时候,
一般情况下在.h中 用 @protocol 协议名称; 告诉当前类 这是一个协议
在.m中 用 #impert 真正的导入一个协议的声明
*/
@class Student;
@protocol StudentProtocol <NSObject>
// 帮学生找房子
- (void)studentFindHourse:(Student *)stu;
@end
@interface Student : NSObject
- (void)findHourse;
//@property(nonatomic, strong)id<StudentProtocol> delegate;
@property(nonatomic, strong)id<StudentProtocol> delegate;
@end
Student.m
#import "Student.h"
@implementation Student
- (void)findHourse
{
NSLog(@"学生想找房子");
// // 通知代理 帮他找房子
if ([self.delegate respondsToSelector:@selector(studentFindHourse:)]) {
// [self.delegate studentFindHourse];
[self.delegate studentFindHourse:self];
}
}
@end
LinkHome.h //链家类
#import <Foundation/Foundation.h>
//#import "Student.h"
// 一般不需要导入头文件 直接protocol 协议的名称
// 类似 @class一样
// 告诉 当前类 StudentProtocol 是一个协议
@protocol StudentProtocol;
@interface LinkHome : NSObject <StudentProtocol>
@end
LinkHome.m
#import "LinkHome.h"
#import "Student.h"
@implementation LinkHome
- (void)studentFindHourse:(Student *)stu
{
NSLog(@"%s",__func__);
}
@end
LoveHome.h //我爱我家类
#import <Foundation/Foundation.h>
//#import "Student.h"
@protocol StudentProtocol;
@interface LoveHome : NSObject<StudentProtocol>
@end
LoveHome.m
#import "LoveHome.h"
#import "Student.h"
@implementation LoveHome
- (void)studentFindHourse:(Student *)stu
{
NSLog(@"%s",__func__);
}
@end