一、< >协议和代理模式
1.在NSObject.h头文件中,我们可以看到
// NSObject类是默认遵守<NSObject>协议的 @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; }
// 往上翻看到NSObject协议的声明
@protocol NSObject
/*
中间一大堆方法的声明
*/
@end
然后我就产生疑问了,为什么我们自己定义的协议是这样,后面加上了<NSObject>。为什么我们自己声明的协议需要遵守<NSObject>协议?
我们都知道,遵守一个协议之后就拥有的该协议中的所有方法的声明。
@protocol MyProtocol <NSObject>
/*
中间一大堆方法的声明
*/
@end
2.代理模式
1> 代理模式:其实就是把自己的事情交给自己的代理去办。A去做一件事,但是他做不到或者他不想做,那么A就去请一个代理B,并且A还要定义一份协议(协议中声明要做的事),只要B遵守了这份协议(表示B有能力帮A完成这些事),就按照这份协议把事情交给B去做。
有一句话:谁想做什么事,谁就定义协议,并设置一个代理;谁想帮做什么事,谁就遵守协议并实现方法。
2> 下面以一个例子来说明:
有一个boss类
//
// Boss.h
// 代理模式
//
// Created by Silence on 16/1/26.
// Copyright © 2016年 Silence. All rights reserved.
//
#import <Foundation/Foundation.h>
// boss有一份协议<ZhuLiDelegate>
@protocol ZhuLiDelegate <NSObject>
// 助理扫地的方法
-(void)zhuLiSaoDi;
@end
@interface Boss : NSObject
// 老板有一个助理Deegate,并且这个助理是遵守了ZhuLiDelegate协议的
// 注意:这里我用的strong修饰的这个delegate(即Boss拥有一个助理的属性Delegate,并且是强引用),但是我并没有在Proxy类中声明一个Boss的属性(即助理有一个老板的属性),老板与助理之间并没有造成循环引用的问题。
@property (nonatomic,strong)id<ZhuLiDelegate> delegate;
// 老板想要扫地
-(void)saoDi;
@end
//
// Boss.m
// 代理模式
//
// Created by Silence on 16/1/26.
// Copyright © 2016年 Silence. All rights reserved.
//