博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS设计模式之代理模式
阅读量:6162 次
发布时间:2019-06-21

本文共 2472 字,大约阅读时间需要 8 分钟。

代理模式

基本理解

  • 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

代理模式的应用

  • 远程代理:就是为一个对象在不同的地址空间提供据不代表。这样可以隐藏一个对象存在于不同地址空间的事实。
  • 虚拟代理:是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
  • 安全代理:用来控制真实对象访问时的权限。
    *智能指引:是指当调用真实的对象时,代理处理另外一些事。

例子

ChildViewCongroller.h

// // ChildViewController.h // DelegateDemo // // Created by zhanggui on 15/8/6. // Copyright (c) 2015年 zhanggui. All rights reserved. // #import 
@protocol ChildDelegate
-(void)changeColor:(UIColor *)color;@end @interface ChildViewController : UIViewController{}@property(assign,nonatomic)id
ChildDelegate;@end

ChildVIewController.m

// // ChildViewController.m // DelegateDemo // // Created by zhanggui on 15/8/6. // Copyright (c) 2015年 zhanggui. All rights reserved. // #import "ChildViewController.h" @interface ChildViewController () @end @implementation ChildViewController- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 100, 200, 50)]; [button addTarget:self action:@selector(show) forControlEvents:UIControlEventTouchUpInside];// button.backgroundColor = [UIColor redColor]; [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [button setTitle:@"返回调用代理" forState:UIControlStateNormal]; [self.view addSubview:button];}-(void)show { [_ChildDelegate changeColor:[UIColor redColor]]; [self.navigationController popToRootViewControllerAnimated:YES];}@end

在一个ViewController中去push出来ChildViewController。点击ChildViewController中的按钮改变根视图的背景色

ViewController.h

// // ViewController.h // DelegateDemo // // Created by zhanggui on 15/8/6. // Copyright (c) 2015年 zhanggui. All rights reserved. // #import 
#import "ChildViewController.h" @interface ViewController : UIViewController
- (IBAction)showChild:(id)sender;@end

ViewController.m

// // ViewController.m // DelegateDemo // // Created by zhanggui on 15/8/6. // Copyright (c) 2015年 zhanggui. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; }#pragma mark - ChildViewDelegate Mehtod-(void)changeColor:(UIColor *)color { self.view.backgroundColor =color; NSLog(@"change color.....");}- (IBAction)showChild:(id)sender { ChildViewController *child = [ChildViewController new]; child.ChildDelegate = self; [self.navigationController pushViewController:child animated:YES];}@end

这样通过代理就可以去实现。

转载地址:http://zwgfa.baihongyu.com/

你可能感兴趣的文章
java中string和int的相互转换
查看>>
P1666 前缀单词
查看>>
HTML.2文本
查看>>
Ubuntu unity安装Indicator-Multiload
查看>>
解决Eclipse中新建jsp文件ISO8859-1 编码问题
查看>>
7.对象创建型模式-总结
查看>>
【论文阅读】Classification of breast cancer histology images using transfer learning
查看>>
移动端处理图片懒加载
查看>>
jQuery.on() 函数详解
查看>>
谈缓存和Redis
查看>>
【转】百度地图api,根据多点注标坐标范围计算地图缩放级别zoom自适应地图
查看>>
用户调研(补)
查看>>
ExtJS之开篇:我来了
查看>>
☆1018
查看>>
oracle 去掉空格
查看>>
6.13心得
查看>>
Runtime类
查看>>
eclipse decompiler
查看>>
记一个搜索网盘资源的网站
查看>>
jdk1.7和jdk1.8的String的getByte方法的差异
查看>>