IOS开发之delegate与简单案例

来源:互联网 发布:青鸟软件开发培训 编辑:程序博客网 时间:2024/05/16 15:34

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

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

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

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

下面是一个简单的例子。

#import <UIKit/UIKit.h>#import "exampleClass.h"@interface MainViewController : UIViewController<myDelegate>@end============================////  MainViewController.m//  testMyDelegate////  Created by silicon on 14-5-4.//  Copyright (c) 2014年 silicon. All rights reserved.//#import "MainViewController.h"@interface MainViewController ()@end@implementation MainViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization    }    return self;}- (void)viewDidLoad{    [super viewDidLoad];    // Do any additional setup after loading the view from its nib.    exampleClass *example = [[exampleClass alloc] init];    [example testMyDelegate];    example.delegate = self;}- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}- (void)dealloc{    [super dealloc];}- (void)test{    NSLog(@"hello delegate");}@end===========================================#import <Foundation/Foundation.h>@protocol myDelegate- (void)test;@end@interface exampleClass : NSObject{    NSObject<myDelegate> *delegate;}@property (strong, nonatomic) NSObject<myDelegate> *delegate;- (void)testMyDelegate;@end==========================================#import "exampleClass.h"@implementation exampleClass@synthesize delegate;//- (id)init{    [super init];    return self;}- (void)testMyDelegate{    [self.delegate test];}@end
以上就是代码示例。


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

接下来我会写一篇有关代理模式原理的文章希望大家指正。



0 0