Objective-C代理

1.代理初识 

假设BOSS需要买电脑   让worker去买  

这时boss需要一个代理即为worker 去买电脑

BOSS创建一个协议  协议中的方法为买电脑

BOSS有一个属性 属性的类为遵守协议的类

BOSS有一个成员方法   方法的实现为 代理去买电脑 

worker类需要遵守协议  实现协议方法 买电脑

代码实现如下 

 1 #import <Foundation/Foundation.h>
 2 #import "Boss.h"
 3 #import "Worker.h"
 4 
 5 int main(int argc, const char * argv[]) {
 6     @autoreleasepool {
 7 
 8         Boss * boss = [[Boss alloc] init];
 9         Worker * worker = [[Worker alloc] init];
10         [boss setDelegate:worker];
11         [boss delegateBuyMacbook];
12                 
13     }
14     return 0;
15 }
main.m
 1 #import <Foundation/Foundation.h>
 2 
 3 //创建协议
 4 @protocol BossDelegate <NSObject>
 5 
 6 - (void)buyMacbook;
 7 
 8 @end
 9 
10 
11 @interface Boss : NSObject
12 //有一个遵守协议的代理
13 @property (nonatomic,weak) id<BossDelegate> delegate;
14 //方法调用代理去买电脑
15 - (void)delegateBuyMacbook;
16 @end
Boss.h
1 #import "Boss.h"
2 
3 @implementation Boss
4 - (void)delegateBuyMacbook {
5     NSLog(@"老板开始找人买电脑");
6     [_delegate buyMacbook];
7 }
8 @end
Boss.m
1 #import <Foundation/Foundation.h>
2 #import "Boss.h"
3 @interface Worker : NSObject<BossDelegate>
4 
5 @end
Worker.h
1 #import "Worker.h"
2 
3 @implementation Worker
4 - (void)buyMacbook {
5     NSLog(@"买了60台Macbook Pro 15 高配");
6 }
7 @end
Worker.m

2.代理回调

/*

 //当我们需要完成某个功能模块,但不知道使用功能模块的是哪个对象,通过协议,可以规定接收数据的对象通过哪个方法获得数据。调用该方法的过程称为【回调】

*/

 1 #import <Foundation/Foundation.h>
 2 #import "LRCManager.h"
 3 int main(int argc, const char * argv[]) {
 4     @autoreleasepool {
 5 //        Download *d = [Download new];
 6         LRCManager * lrcManager = [[LRCManager alloc] init];
 7 //        lrcManager.download = d;
 8 //        d = nil;
 9 //        
10 //        Download __weak *  download = [Download new];
11 //        
12 //        NSLog(@"%@",lrcManager.download);
13         [lrcManager run];
14     }
15     return 0;
16 }
main.m
 1 #import <Foundation/Foundation.h>
 2 #import "Download.h"
 3 /*
 4  //当我们需要完成某个功能模块,但不知道使用功能模块的是哪个对象,通过协议,可以规定接收数据的对象通过哪个方法获得数据。调用该方法的过程称为【回调】
 5 */
 6 @interface LRCManager : NSObject<DownloadDelegate>
 7 @property (nonatomic,weak) Download * download;
 8 @property (nonatomic,strong) NSString * lrcContent;
 9 - (void)run;
10 + (void)test;
11 @end
LRCManager.h
 1 #import "LRCManager.h"
 2 
 3 @implementation LRCManager
 4 
 5 + (void)test {
 6     LRCManager * lrcManager = [[LRCManager alloc] init];
 7     [lrcManager run];
 8 }
 9 
10 - (void)run {
11     Download * download = [[Download alloc] init];
12     download.delegate = self;
13     [download downloadWithURLPath:@"www.baidu.com"];    
14 }
15 
16 - (void)downloadFinished:(NSString *)str {
17     NSLog(@"%@",str);
18 }
19 
20 - (void)dealloc {
21     NSLog(@"lrcManager dealloc");
22 }
23 @end
LRCManager.m.m
 1 #import <Foundation/Foundation.h>
 2 
 3 @protocol DownloadDelegate <NSObject>
 4 
 5 - (void)downloadFinished:(NSString *)str;
 6 
 7 @end
 8 
 9 @interface Download : NSObject
10 @property (nonatomic,weak) id<DownloadDelegate> delegate;
11 - (void)downloadWithURLPath:(NSString *)path;
12 @end
Download.h
 1 #import "Download.h"
 2 
 3 @implementation Download
 4 - (void)downloadWithURLPath:(NSString *)path {
 5     int i = 0;
 6     while (i++ < 5) {
 7         printf("下载中
");
 8         sleep(1);
 9     }
10     NSString * lrcStr= @"我是下载到的字符串";
11     [_delegate downloadFinished:lrcStr];
12 }
13 
14 - (void)dealloc {
15     NSLog(@"download dealloc");
16 }
17 @end
Download.m

3.双向代理  

Boss需要个代理去工作

Worker需要代理发工资

原文地址:https://www.cnblogs.com/gwkiOS/p/4944111.html