美文网首页委托代理Delegate in iOS
iOS代理模式的使用,委托(delegate)

iOS代理模式的使用,委托(delegate)

作者: 高级搬砖工 | 来源:发表于2016-08-03 16:10 被阅读566次

在iOS开发中代理是非常常见和普遍的,代理是一种通用的设计模式,iOS中对代理支持的很好,由代理对象、委托者、协议三部分组成。

  • 协议:用来指定代理双方可以做什么,必须做什么。
  • 代理:根据指定的协议,完成委托方需要实现的功能。
  • 委托:根据指定的协议,指定代理去完成什么功能。

代理的具体实现:

首先要在委托方.h文件中定义声明:

 //MPMusicPlayingViewController.h
#import <UIKit/UIKit.h>    

@protocol MPMusicPlayingViewDelegate;//代理名称一般以委托方类名+delegate

@interface MPMusicPlayingView : UIView
 //遵循协议的一个代理变量定义 
@property (nonatomic,weak)id<MPMusicPlayingViewDelegate>delegate;

@end
//定义代理协议
@protocol MPMusicPlayingViewDelegate <NSObject>

- (void)MusicVcWantDoSomeThing:(NSString */*要传递的参数,此处以字符串为例*/)string;
//也可以不传参数只实现委托方法

@end

在委托方.m文件中:

 //MPMusicPlayingViewController.h
- (void)viewDidLoad{
    [super viewDidLoad];
    NSString *thank = @"tahankYou";
    [self iWantDoSomeThing:thank];
}

- (void)iWantDoSomeThing:(NSString *)string{
if (self.delefate respondsToSelector:@selector(MusicVcWantDoSomeThing:)) {
    //要在实现代理的.m中实现代理方法才会掉用
    [self.delegate MusicVcWantDoSomeThing:string];
  }
}

在代理方的.m文件中

 //MPMusicRootViewController
 #import "MPMusicPlayingViewController.h"//先包含委托方的头文件

 @interface MPMusicRootViewController ()< MPMusicPlayingViewDelegate >//这里要注意!

- (void)viewDidLoad {
[super viewDidLoad];

MPMusicPlayingViewController *PlayingVC = [[MPMusicPlayingViewController alloc] init];
PlayingVC.delegate = self;//设置代理实例
}
 //当MPMusicPlayingViewController中掉用iWantDoSomeThing:方法是此代理方法实现
- (void)MusicVcWantDoSomeThing:(NSString */*要传递的参数,此处以字符串为例*/)string{

  NSLog(@"传过来的值为:%@",string);
  //如果需要用可以定义个全局变量把string的值拿去用。
}

大多数人想要改造这个世界,但却罕有人想改造自己。

相关文章

  • Proxy和的delegate区别

    Proxy和的delegate区别 在ios中使用proxy代理模式,经常容易和delegate委托模式混淆。 委...

  • [学习笔记]_iOS代理基本使用,界面间传值

    参考链接: 你真的了解iOS代理设计模式吗? iOS开发-Protocol协议及委托代理(Delegate)传值 ...

  • 代码规范(二)

    iOS中委托的设计 1. 要区分好代理和数据源的区别 在iOS开发中的委托模式包含了delegate(代理)和da...

  • iOS 开发:代理+KVO+通知+Block

    iOS 委托代理(delegate) 本质:我提供一个我自己的委托(方法)。你如果要使用我这个方法,确认代理(设置...

  • iOS代理模式的使用,委托(delegate)

    在iOS开发中代理是非常常见和普遍的,代理是一种通用的设计模式,iOS中对代理支持的很好,由代理对象、委托者、协议...

  • 设计模式 - delegate(委托/代理模式)

    delegate(委托/代理模式) 委托/代理模式的优点: 单一一个类无法表现复杂的设计 设计拆分 方便重用 相对...

  • 代理模式

    首先要分清代理模式(proxy)和委托(delegate)模式的区别? 共性:代理和委托都有一个共性,那就是自己单...

  • iOS开发--代理的使用

    iOS中在cocoa框架中的Delegate模式与自定义的委托模式。 在cocoa框架中的Delegate模式中,...

  • 代理模式——基础的设计

      代理模式(Proxy Pattern)也称委托模式(Delegate Pattern),是一种结构型设计模式,...

  • iOS 逆向传值

    代理(delegate)、通知(NSNotification),block等等。 1、委托代理delegate只能...

网友评论

  • 知行合一认知升级:都是musicVC,不清晰啊。
    self._delegate。 还有这种操作?
    高级搬砖工:@慢跑20 typo了~ 不过思路已经很清晰了
  • 郑明明:讲的不错
  • feng_dev:大神,实现代理的时候传参是从哪里传到哪里?传值的方向能说一下嘛,Controller里面实现代理的那个地方的参数是从Controller里获取的把,
    点击视图的时候,是先走的Controller里面的代理方法 ,还是 先走的 协议里面 调代理 ?
    有点迷糊
    高级搬砖工:@Developer_峰 创建个工程打断点跑一下就你明白了

本文标题:iOS代理模式的使用,委托(delegate)

本文链接:https://www.haomeiwen.com/subject/tbbqsttx.html