国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

怎么自己在Objective-C中創(chuàng)建代理

2019-11-14 18:43:01
字體:
供稿:網(wǎng)友

首先我們要先創(chuàng)建一個類,為了方便理解我們就模擬現(xiàn)實生活中的找中介租房子,因此先創(chuàng)建一個Person類

1.在Person.h中定義代理的協(xié)議,并完成代理方法聲明:代碼如下

 1 // Person.h文件 2  3 #import <Foundation/Foundation.h> 4  5 @class Person; 6  7 //1 定義代理的協(xié)議 8 @PRotocol PersonDelegate <NSObject> 9 10 // 可選方法11 @optional12 - (void)personFindHouse:(Person *)person;13 // 必要方法14 @required15 16 @end17 18 @interface Person : NSObject19 20 @end

注:代理協(xié)議中可選方法可實現(xiàn)可不實現(xiàn),但必要方法必須實現(xiàn)

2、定義代理屬性:代碼如下

 1 // Person.h文件 2   3 #import <Foundation/Foundation.h> 4 @class Person; 5 //1 定義代理的協(xié)議 6 @protocol PersonDelegate <NSObject> 7 // 可選方法 8 @optional 9 - (void)personFindHouse:(Person *)person;10 // 必要方法11 @required12 13 @end14  15 @interface Person : NSObject16 @property (nonatomic,copy) NSString *name;17 //2 定義代理屬性18 @property (nonatomic,weak) id<PersonDelegate> delegate;19 - (void)zuFang;20 @end

3、調(diào)用代理的方法(通知) 給代理發(fā)送消息:代碼如下

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

上面代碼第10行是判斷這個對象是否實現(xiàn)了personFindHouse:這個方法

好現(xiàn)在我們需要定義一個ZhongJie類來使用這個代理

1、讓這個類遵守代理協(xié)議:代碼如下

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

2、實現(xiàn)代理方法:代碼如下

 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、設(shè)置代理屬性:代碼如下

 1 // ViewController.m 文件 2 #import "ViewController.h" 3 #import "Person.h" 4 #import "ZhongJie.h" 5 @interface ViewController () 6  7 @end 8  9 @implementation ViewController10 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 設(shè)置代理屬性20     p.delegate = zj;21     22     [p zuFang];23     24 }25 26 27 @end

 

這樣我們就創(chuàng)建了代理,并讓一個對象使用了這個代理

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南昌市| 麟游县| 凤冈县| 吐鲁番市| 满洲里市| 肥西县| 石景山区| 邳州市| 白银市| 年辖:市辖区| 三门县| 汶川县| 利川市| 东莞市| 报价| 安泽县| 河北省| 云林县| 江永县| 阿巴嘎旗| 新绛县| 钟山县| 盈江县| 云林县| 东方市| 长治市| 安泽县| 呼和浩特市| 涪陵区| 七台河市| 金门县| 句容市| 新疆| 原平市| 克山县| 安陆市| 乌鲁木齐县| 武功县| 遂平县| 新干县| 福贡县|