zoukankan      html  css  js  c++  java
  • 保存对象的不同状态值

    保存对象的不同状态值

    效果

    说明

    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

    注意

  • 相关阅读:
    Centos下安装JAVA
    发布app到appstore的详细步骤
    修改Struts2的struts.xml配置文件位置
    linux 打印当前进程环境变量
    软件复用
    用Delphi开发OPC客户端工具的方法研究
    位图显示地图
    idFTPserver控件实现的ftp 服务器
    电子地图概念
    Tidftp实现自动更新程序
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4611942.html
Copyright © 2011-2022 走看看