zoukankan      html  css  js  c++  java
  • 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需要代理发工资

  • 相关阅读:
    java实现网上购物车的简单功能
    java类的访问权限
    linux shell 参数传递
    shell编程之tput
    Linux编程时获取当前时间实例解析
    shell中的引号,单引号,反引号
    Linux 查看Shell类型
    迭代器(lterator)
    在AIX系统下查询硬件信息的方法
    LINUX,HPUX,AIX系统查询主机配置信息
  • 原文地址:https://www.cnblogs.com/gwkiOS/p/4944111.html
Copyright © 2011-2022 走看看