zoukankan      html  css  js  c++  java
  • iOS设计模式之代理模式

    代理模式

    基本理解

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

    代理模式的应用

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

    例子

    ChildViewCongroller.h

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

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

    附:

  • 相关阅读:
    SQL 操作结果集 -并集、差集、交集、结果集排序
    bootstrap的css和js
    pandas DataFrame数据转为list
    nodejs 不同请求获取前端传的参数
    微信小程序switch组件尺寸控制
    vue-cli项目部署到服务器
    element-ui table 底部滚动条问题
    简单配色
    浏览器滚动条自定义化
    element table固定表头,表的高度自适应解决方法
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4708637.html
Copyright © 2011-2022 走看看