使用@selector模仿代理功能降低代码耦合度
使用@selector模仿代理功能降低代码耦合度

说明
该模式的好处就是两个产生联系的对象间并没有具体的耦合代码,增删改查均很直观
源码
Model
//
// Model.h
// SELMethod
//
// Created by YouXianMing on 15/5/22.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import <Foundation/Foundation.h> #define SafePerformSelector(Stuff) \
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
Stuff; \
_Pragma("clang diagnostic pop") \
} while () @interface Model : NSObject /**
* 属性名字
*/
@property (nonatomic, strong) NSString *name; /**
* 设置代理与方法
*/
@property (nonatomic, weak) id delegate;
@property (nonatomic) SEL method; - (void)doSomeThing; @end
//
// Model.m
// SELMethod
//
// Created by YouXianMing on 15/5/22.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import "Model.h" @implementation Model - (void)doSomeThing { // 执行代理以及方法
if (_method && _delegate) {
SafePerformSelector([_delegate performSelector:_method withObject:self]);
}
} @end
ViewController
//
// ViewController.m
// SELMethod
//
// Created by YouXianMing on 15/5/22.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import "ViewController.h"
#import "Model.h" @interface ViewController () @property (nonatomic, strong) Model *model; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; // 初始化对象
self.model = [Model new];
self.model.name = @"YouXianMing"; // 设置代理与方法
self.model.method = @selector(modelValue:);
self.model.delegate = self; // 执行操作
[self.model doSomeThing];
} - (void)modelValue:(Model *)value {
NSLog(@"%@", value.name);
} @end
细节


使用@selector模仿代理功能降低代码耦合度的更多相关文章
- Nginx代理功能与负载均衡详解
序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...
- Atitit.http代理的实现 代码java php c# python
Atitit.http代理的实现 代码java php c# python 1. 代理服务器用途 代理服务器看成是一种扩展浏览器功能的途径.例如,在把数据发送给浏览器之前,可以用代理服务器压缩数据 调 ...
- IOS中在自定义控件(非视图控制器)的视图跳转中 代理方法与代码块的比较
//代码块与代替代理的设计方法 我就以在自定义视图中(非视图控制器,不能实现视图控制功能),通过代理和代码块两种方法分别实现视图的跳转,进行对比 首先自定义了一个视图,上面有一个已经注册了得BUtto ...
- 通过Jmeter 代理功能获取postman请求
对于初学者在Jmeter 配置 请求其实属于比较麻烦的事情,但是如果在Postman配置就容易多了,所以考虑是否可以把postman的配置直接导入Jmeter,避免初学者上手不易的问题,后来考虑使用J ...
- Mybatis Laz-Load功能实现代码赏析(原创)
对于Mybatis 拥有的Lazy Load(有中文翻译成延迟加载)功能,应该很同学都有听说过,今天主要与大家一起来解读一下Mybatis在Lazy Load功能的实现的代码.Lazy Load实现的 ...
- Java 从零开始实现一个画图板、以及图像处理功能,代码可复现
Java 从零开始实现一个画图板.以及图像处理功能,代码可复现 这是一个学习分享博客,带你从零开始实现一个画图板.图像处理的小项目,为了降低阅读难度,本博客将画图板的一步步迭代优化过程展示给读者,篇幅 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能
在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...
- 设计模式--5.5 代理模式-通用代码及aop
1.通用代码 (1)Subjects package com.design.代理模式.通用代码; public interface Subject { void request(); } (2)Rea ...
- 青云QingCloud业内率先支持云端全面透明代理功能 | SDNLAB | 专注网络创新技术
青云QingCloud业内率先支持云端全面透明代理功能 | SDNLAB | 专注网络创新技术 青云QingCloud业内率先支持云端全面透明代理功能
随机推荐
- Maven项目版本继承 – 我必须指定父版本?
问题描述 我有两个项目:父项目:A,子项目:B 在A /pom.xml中: <groupId>com.dummy.bla</groupId> <artifactId> ...
- UVM序列篇之一:新手上路
声明:本人所有权属路科验证,本人仅为个人学习方便将文章整理至此. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 有了UVM的世界观,知道这座城市的建 ...
- 大数据sql引擎
Hive:把sql解析后用MapReduce跑 SparkSQL:把sql解析后用Spark跑,比hive快点 Phoenix:一个绕过了MapReduce运行在HBase上的SQL框架 Drill/ ...
- Promise原理详解
参考文章:深入理解 Promise.[翻译]Promises/A+规范 从入门Promise的正确姿势中我们已经了解到Promise的基本用法.那么现在给你一个需求:根据Promise的用法和Prom ...
- Android 直接通过JNI访问驱动
package com.yang.jniaccesshardware; import android.os.Bundle; import android.support.v7.app.AppCompa ...
- 四大CPU体系结构:ARM、X86/Atom、MIPS、PowerPC
补充介绍一下RISC:RISC(reduced instruction set computer,精简指令集计算机)是一种执行较少类型计算机指令的微处理器,起源于80年代的MIPS主机(即RISC机) ...
- [转]Http请求中Content-Type讲解以及在Spring MVC中的应用
本文转自:http://blog.csdn.net/blueheart20/article/details/45174399 引言: 在Http请求中,我们每天都在使用Content-type来指定不 ...
- 跨域 cookies
script标签请求的js脚本,如果跨域了,请求会带有外域的cookies信息. XMLHttpRequest请求跨域时,需要有Access-Control-*等的头信息,如果需要将cookies传输 ...
- Cheatsheet: 2017 07.01 ~ 07.31
Other 8 Key Application Performance Metrics & How to Measure Them The Code Review: The Most Impo ...
- Java设计模式浅谈
1.java的设计模式可以分为3类: 创建型模式(5种):工厂模式,抽象工厂模式,建造者模式,单例模式,原型模式: 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式和 ...