IOS开发之delegate与简单案例

初学IOS开发的时候,很多人都会对delegate这个词感到陌生与好奇,delegate其实是一种模式称之为“代理模式”,接下来在篇文章中我们就来一起看一下delegate的用法吧!

在IOS中委托通过协议@protocol来实现,在协议中所声明的方法,不需要在协议中有实现的方法,是由他的实现类来实现(该类需要在头文件中包含‘<协议名>’).

首先先解释一下 “协议”与“委托”这两个是不一样的概念,因为我们在看代码的时候老是会看到他们出现在一起。举个例子什么是“委托”:好比我正在开车,但是开车可不能看手机微信呀,这样很危险,所以我就叫坐在车里的小乔帮我看微信,这样下来我就可以正常开车,当小乔看完微信后就告诉我是里面是什么内容。这就是委托,小乔是我的委托对象。

“协议”protocol:是用来定义对象的属性和行为,有点类似于C++的虚函数。它有两个关键字@required与@optional,前者表示这个协议必须要写的方法,后者表示方法可选。

下面是一个简单的例子。

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #import <UIKit/UIKit.h>  
  2. #import "exampleClass.h"  
  3.   
  4.   
  5. @interface MainViewController : UIViewController<myDelegate>  
  6.   
  7.   
  8. @end  
  9.   
  10. ============================  
  11. //  
  12. //  MainViewController.m  
  13. //  testMyDelegate  
  14. //  
  15. //  Created by silicon on 14-5-4.  
  16. //  Copyright (c) 2014年 silicon. All rights reserved.  
  17. //  
  18.   
  19.   
  20. #import "MainViewController.h"  
  21.   
  22.   
  23. @interface MainViewController ()  
  24.   
  25.   
  26. @end  
  27.   
  28.   
  29. @implementation MainViewController  
  30.   
  31.   
  32. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
  33. {  
  34.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
  35.     if (self) {  
  36.         // Custom initialization  
  37.     }  
  38.     return self;  
  39. }  
  40.   
  41.   
  42. - (void)viewDidLoad  
  43. {  
  44.     [super viewDidLoad];  
  45.     // Do any additional setup after loading the view from its nib.  
  46.     exampleClass *example = [[exampleClass alloc] init];  
  47.     [example testMyDelegate];  
  48.     example.delegate = self;  
  49. }  
  50.   
  51.   
  52. - (void)didReceiveMemoryWarning  
  53. {  
  54.     [super didReceiveMemoryWarning];  
  55.     // Dispose of any resources that can be recreated.  
  56. }  
  57.   
  58.   
  59. - (void)dealloc{  
  60.     [super dealloc];  
  61. }  
  62.   
  63.   
  64. - (void)test{  
  65.     NSLog(@"hello delegate");  
  66. }  
  67.   
  68.   
  69. @end  
  70.   
  71.   
  72. ===========================================  
  73. #import <Foundation/Foundation.h>  
  74.   
  75.   
  76. @protocol myDelegate  
  77.   
  78.   
  79. - (void)test;  
  80.   
  81.   
  82. @end  
  83.   
  84.   
  85. @interface exampleClass : NSObject{  
  86.     NSObject<myDelegate> *delegate;  
  87. }  
  88.   
  89.   
  90. @property (strongnonatomic) NSObject<myDelegate> *delegate;  
  91.   
  92.   
  93. - (void)testMyDelegate;  
  94.   
  95.   
  96.   
  97.   
  98. @end  
  99.   
  100. ==========================================  
  101. #import "exampleClass.h"  
  102.   
  103.   
  104. @implementation exampleClass  
  105. @synthesize delegate;  
  106. //  
  107. - (id)init{  
  108.     [super init];  
  109.     return self;  
  110. }  
  111.   
  112.   
  113. - (void)testMyDelegate{  
  114.     [self.delegate test];  
  115. }  
  116.   
  117.   
  118. @end  
以上就是代码示例。


个人认为使用委托的好处就在于,可以在类中实现消息的传递,避免了类与类的耦合度过高。利用委托赋值更加安全可控,委托赋值在不暴露自己类的属性的前提下就可以对自己进行赋值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值