当前位置: 首页 > news >正文

保存对象的不同状态值

保存对象的不同状态值

 

效果

 

说明

1. 存储不同的状态,对于一个对象而言还是很有必要的,尤其是需要频繁切换状态的时候.

2. block是对象,是可以存储在集合中的.

 

源码

https://github.com/YouXianMing/ViewState

//
//  NSObject+StatePattern.h
//  ViewState
//
//  Created by YouXianMing on 15/6/30.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef void(^NSObjectBlock_t)(id object);

@interface NSObject (StatePattern)

/**
 *  存储状态的字典
 */
@property (nonatomic, strong, readonly) NSMutableDictionary  *stateDictionary;

/**
 *  注册状态
 *
 *  @param stateString 状态标签值
 *  @param stateBlock  保存状态的block
 */
- (void)registerState:(NSString *)stateString stateBlock:(NSObjectBlock_t)stateBlock;

/**
 *  切换到指定标签的状态
 *
 *  @param stateString 状态标签值
 */
- (void)switchToState:(NSString *)stateString;

@end
//
//  NSObject+StatePattern.m
//  ViewState
//
//  Created by YouXianMing on 15/6/30.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "NSObject+StatePattern.h"
#import <objc/runtime.h>

@implementation NSObject (StatePattern)


- (void)registerState:(NSString *)stateString stateBlock:(NSObjectBlock_t)stateBlock {

    [self setup];
    
    [self.stateDictionary setObject:stateBlock forKey:stateString];
}


- (void)switchToState:(NSString *)stateString {

    [self setup];
    
    NSObjectBlock_t block = [self.stateDictionary objectForKey:stateString];
    
    if (block) {
        
        __weak id weakSelf = self;
        block(weakSelf);
    }
}


- (void)setup {
    
    if (self.stateDictionary == nil) {
        self.stateDictionary = [NSMutableDictionary dictionary];
    }
}


#pragma mark - runtime属性
@dynamic stateDictionary;
NSString * const _recognizerStateDictionary = @"_recognizerStateDictionary";

- (void)setStateDictionary:(NSMutableDictionary *)stateDictionary {
    
    objc_setAssociatedObject(self, (__bridge const void *)(_recognizerStateDictionary), stateDictionary, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (NSMutableDictionary *)stateDictionary {
    
    return objc_getAssociatedObject(self, (__bridge const void *)(_recognizerStateDictionary));
}


@end

 

注意

 

转载于:https://www.cnblogs.com/YouXianMing/p/4611942.html

相关文章:

  • Linux练习(write写入)
  • matlab练习程序(随机游走图像)
  • 远程桌面连接记录彻底清除
  • Android中使用WebView, WebChromeClient和WebViewClient加载网页
  • 多态的好处和弊端以及多态的理解
  • 要乐观对待生活
  • web计算器
  • iptables的配置文件/etc/sysconfig/iptables不存在怎么办
  • MySQL控制(关闭、打开)自动提交功能
  • beego框架之orm模块——sqlite
  • 数据库的连接池
  • JavaWeb学习总结(五十一)——邮件的发送与接收原理
  • xml文件的读取
  • Java 反射机制(一)
  • fail-fast
  • @angular/forms 源码解析之双向绑定
  • 《Java编程思想》读书笔记-对象导论
  • 【剑指offer】让抽象问题具体化
  • create-react-app做的留言板
  • CSS 三角实现
  • JDK9: 集成 Jshell 和 Maven 项目.
  • leetcode-27. Remove Element
  • Linux中的硬链接与软链接
  • PHP CLI应用的调试原理
  • 聊聊hikari连接池的leakDetectionThreshold
  • 数组大概知多少
  • 探索 JS 中的模块化
  • 微信小程序填坑清单
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 走向全栈之MongoDB的使用
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 阿里云ACE认证之理解CDN技术
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (初研) Sentence-embedding fine-tune notebook
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (转)3D模板阴影原理
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转载)利用webkit抓取动态网页和链接
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .Net 代码性能 - (1)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • /etc/sudoers (root权限管理)
  • @private @protected @public
  • @test注解_Spring 自定义注解你了解过吗?
  • [Android] Upload package to device fails #2720
  • [CF482B]Interesting Array
  • [GN] 后端接口已经写好 初次布局前端需要的操作(例)
  • [JavaWeb玩耍日记]Maven的安装与使用
  • [Java性能剖析]Sun JDK基本性能剖析工具介绍
  • [Luogu 2816]宋荣子搭积木
  • [Mybatis-Plus笔记] MybatisPlus-03-QueryWrapper条件构造器
  • [python3] 装饰器
  • [UE4]动画蓝图的编辑全流程(Animation Blueprint)