zoukankan      html  css  js  c++  java
  • 怎么自己在Objective-C中创建代理

    首先我们要先创建一个类,为了方便理解我们就模拟现实生活中的找中介租房子,因此先创建一个Person类

    1.在Person.h中定义代理的协议,并完成代理方法声明:代码如下

     1 // Person.h文件
     2 
     3 #import <Foundation/Foundation.h>
     4 
     5 @class Person;
     6 
     7 //1 定义代理的协议
     8 @protocol PersonDelegate <NSObject>
     9 
    10 // 可选方法
    11 @optional
    12 - (void)personFindHouse:(Person *)person;
    13 // 必要方法
    14 @required
    15 
    16 @end
    17 
    18 @interface Person : NSObject
    19 
    20 @end

    注:代理协议中可选方法可实现可不实现,但必要方法必须实现

    2、定义代理属性:代码如下

     1 // Person.h文件
     2  
     3 #import <Foundation/Foundation.h>
     4 @class Person;
     5 //1 定义代理的协议
     6 @protocol PersonDelegate <NSObject>
     7 // 可选方法
     8 @optional
     9 - (void)personFindHouse:(Person *)person;
    10 // 必要方法
    11 @required
    12 
    13 @end
    14  
    15 @interface Person : NSObject
    16 @property (nonatomic,copy) NSString *name;
    17 //2 定义代理属性
    18 @property (nonatomic,weak) id<PersonDelegate> delegate;
    19 - (void)zuFang;
    20 @end

    3、调用代理的方法(通知) 给代理发送消息:代码如下

     1 // Person.m文件
     2 #import "Person.h"
     3 
     4 @implementation Person
     5 - (void)zuFang
     6 {
     7     NSLog(@"%@--要租房",self.name);
     8     
     9     //3 调用代理的方法(通知) 给代理发送消息
    10     if([self.delegate respondsToSelector:@selector(personFindHouse:)])
    11     {
    12         [self.delegate personFindHouse:self];
    13 
    14     }
    15 }
    16 @end

    上面代码第10行是判断这个对象是否实现了personFindHouse:这个方法

    好现在我们需要定义一个ZhongJie类来使用这个代理

    1、让这个类遵守代理协议:代码如下

    1 // ZhongJie.h文件
    2 #import <Foundation/Foundation.h>
    3 #import "Person.h"
    4 
    5 @interface ZhongJie : NSObject <PersonDelegate>
    6 
    7 @end

    2、实现代理方法:代码如下

     1 // ZhongJie.m文件
     2 #import "ZhongJie.h"
     3 
     4 @implementation ZhongJie
     5 
     6 - (void)personFindHouse:(Person *)person
     7 {
     8     NSLog(@"找到房子了 ");
     9 }
    10 
    11 @end

    3、设置代理属性:代码如下

     1 // ViewController.m 文件
     2 #import "ViewController.h"
     3 #import "Person.h"
     4 #import "ZhongJie.h"
     5 @interface ViewController ()
     6 
     7 @end
     8 
     9 @implementation ViewController
    10 
    11 - (void)viewDidLoad {
    12     [super viewDidLoad];
    13     // Do any additional setup after loading the view, typically from a nib.
    14     ZhongJie *zj = [[ZhongJie alloc] init];
    15     
    16     Person *p = [[Person alloc] init];
    17     
    18     p.name = @"someOne";
    19     //3 设置代理属性
    20     p.delegate = zj;
    21     
    22     [p zuFang];
    23     
    24 }
    25 
    26 
    27 @end

    这样我们就创建了代理,并让一个对象使用了这个代理

  • 相关阅读:
    封装LuaEngine
    Lua for循环
    lua 排序
    Lua中的数学库
    linux 常用指令
    lua table 遍历
    Charles——charles代理菜单proxy总结——端口转发
    Charles——charles代理菜单proxy总结—— 开始/暂停模拟慢网速—— stop/start throttling 和 throttling settings
    Charles——charles代理菜单proxy总结——代理设置proxy setting
    Charles——charles代理菜单proxy总结——SSL代理设置SSL Proxying Srtting
  • 原文地址:https://www.cnblogs.com/melodyzhy/p/4640619.html
Copyright © 2011-2022 走看看