zoukankan      html  css  js  c++  java
  • 属性锁TimeLock

    属性锁TimeLock

    这是本人所写的几个类,用于对属性设置值时进行锁定与解锁,适用于高逼格动画当中。

    源码:

    TimeLock.h 与 TimeLock.m

    //
    //  TimeLock.h
    //  TimeLock
    //
    //  Created by YouXianMing on 14/12/3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    typedef void (^timeLockBlock)();
    
    @interface TimeLock : NSObject
    
    @property (nonatomic, assign) BOOL lock;
    
    @end
    //
    //  TimeLock.m
    //  TimeLock
    //
    //  Created by YouXianMing on 14/12/3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "TimeLock.h"
    
    @implementation TimeLock
    
    @end

    延时锁:

    TimeDelayLock.h 与 TimeDelayLock.m

    //
    //  TimeDelayLock.h
    //  TimeLock
    //
    //  Created by YouXianMing on 14/12/3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "TimeLock.h"
    #import <UIKit/UIKit.h>
    
    @interface TimeDelayLock : TimeLock
    
    /**
     *  延时的时间
     */
    @property (nonatomic, assign) CGFloat duration;
    
    /**
     *  执行上锁的block
     *
     *  @param block 可执行代码
     */
    - (void)excuteBlock:(timeLockBlock)block;
    
    @end

    仅运行一次的锁:

    TimeLockOnce.h 与 TimeLockOnce.m

    //
    //  TimeLockOnce.h
    //  TimeLock
    //
    //  Created by YouXianMing on 14/12/3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "TimeLock.h"
    
    @interface TimeLockOnce : TimeLock
    
    /**
     *  执行上锁的block
     *
     *  @param block 可执行代码
     */
    - (void)excuteBlock:(timeLockBlock)block;
    
    @end
    //
    //  TimeLockOnce.m
    //  TimeLock
    //
    //  Created by YouXianMing on 14/12/3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "TimeLockOnce.h"
    
    @implementation TimeLockOnce
    
    - (void)excuteBlock:(timeLockBlock)block {
        if (self.lock == NO) {
            self.lock = YES;
            
            block();
        }
    }
    
    @end

    使用时候的详情:

    //
    //  Model.h
    //  TimeLock
    //
    //  Created by YouXianMing on 14/12/3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface Model : NSObject
    
    @property (nonatomic, strong) NSString *name;
    @property (nonatomic, strong) NSString *sex;
    
    @end
    //
    //  Model.m
    //  TimeLock
    //
    //  Created by YouXianMing on 14/12/3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "Model.h"
    #import "TimeLockOnce.h"
    #import "TimeDelayLock.h"
    
    @interface Model ()
    
    @property (nonatomic, strong) TimeDelayLock *delayLock;
    @property (nonatomic, strong) TimeLockOnce  *lockOnce;
    
    @end
    
    @implementation Model
    
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            self.delayLock = [TimeDelayLock new];
            self.lockOnce  = [TimeLockOnce new];
        }
        return self;
    }
    
    @synthesize name = _name;
    - (void)setName:(NSString *)name {
        [self.delayLock excuteBlock:^{
            _name = name;
        }];
    }
    - (NSString *)name {
        return _name;
    }
    
    @synthesize sex = _sex;
    - (void)setSex:(NSString *)sex {
        [self.lockOnce excuteBlock:^{
            _sex = sex;
        }];
    }
    - (NSString *)sex {
        return _sex;
    }
    
    @end
  • 相关阅读:
    java 动态规划算法求解最长公共子串
    Dos 连接远程DB2数据库及其常用操作
    Nio 读取UTF-8文件出现中文乱码
    maven配置 lucene ikanayzer
    简单的生产消费者模型
    解决当前项目遇到多叉树的情况第二版
    解决当前项目遇到多叉树的情况
    关于windowSoftInputMode
    Android中悬浮小窗播放视频的实现方案
    Android基础之Activity篇-启动模式探索(Cover Android Develop Guide)
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4141545.html
Copyright © 2011-2022 走看看