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

    注意

  • 相关阅读:
    配置Yaf
    计算机科学中最重要的32个算法
    mysql show status详解
    Structs 在Struts.xml中配置action时,action的name属性最好首字母大写
    MyEclipse创建ssh项目和连接数据库
    Myeclipse安装svn插件
    win7安装ubuntu双系统
    Java查看API和源码的方法
    华为oj平台的新网址
    详细解析Java中抽象类和接口的区别
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4611942.html
Copyright © 2011-2022 走看看