属性锁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

属性锁TimeLock的更多相关文章

  1. python with 线程锁

    import threading import time num = 0 # 全局变量多个线程可以读写,传递数据 mutex = threading.RLock() # 创建一个锁 class Myt ...

  2. EFFECTIVE OBJECTIVE-C 2.0 TIPS 总结 CHAPTER 1 & CHAPTER 2

    下面只是对读到的所有 Tips 结合我平时开发中遇到的问题进行总结,每一个 Tips 和书中的每一条对应,本文的目的是去掉书中的大部分讨论的内容,让人能够马上使用这些 Tips,建议阅读过原书后食用更 ...

  3. Elasticsearch相关配置(二)

    一.关于elasticsearch的基本概念 term 索引词,在elasticsearch中索引词(term)是一个能够被索引的精确值.foo,Foo Foo几个单词是不相同的索引词.索引词(ter ...

  4. ECMASCRIPT5新特性(转载)

    Function 1: Object.create 这是一个很重要的改动,现在我们终于可以得到一个原型链干净的对象了.以前要创建一个类 function Cat(name) { this.name   ...

  5. Elasticsearch 学习总结 - 相关配置补充说明

    一.   Elasticsearch的基本概念 term索引词,在elasticsearch中索引词(term)是一个能够被索引的精确值.foo,Foo Foo几个单词是不相同的索引词.索引词(ter ...

  6. xml 及其语法

    先说一些关于框架,开发中的框架,主要是用反射技术来封装数据. 先指定规范写出xml,然后通过读写流技术封装好一些API用来映射xml文件,方便取得xml中的配置信息.取得xml内容就可以通过取得的内容 ...

  7. python 银行系统

    目前代码只写到这 主要部分已经实现 功能部分展现 首先我们需要五个类 用户类  : 成员属性 name  id  以及 card 卡类: 成员属性 卡号  密码  余额   锁 界面类:   管理员界 ...

  8. 《图解HTTP》笔记

    web网络基础 概述 Web是建立在HTTP(超文本传输协议)上通信的 通常使用的网络(包括互联网)是在TCP/IP基础上运作的,HTTP属于它的内部子集 TCP/IP协议 协议族 计算机与网络设备要 ...

  9. javascript入门 之 zTree(十四 增删查改)(二)

    <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - addNodes / editName / rem ...

随机推荐

  1. CSAPP阅读笔记-struct, union, 数据对齐-来自第三章3.9的笔记-P183-P191

    1.数据对齐 为什么要对齐:通俗点解释就是CPU对数据访问时,每次都是取固定数量的字节数,假如一次取4个字节,若有个int存在0x01-0x04,则一次就能取出,若存在0x03-0x06,则需要分两次 ...

  2. (转)如何使用Journalctl查看并操作Systemd日志

    原文:https://blog.csdn.net/zstack_org/article/details/56274966 内容简介 作为最具吸引力的优势,systemd拥有强大的处理与系统日志记录功能 ...

  3. Fiddler使用二(Fiddler抓取HTTP请求)

    参考:http://blog.csdn.net/ohmygirl/article/details/17849983 Fiddler使用一中已经介绍了Fiddler的原理和软件界面.本文主要针对Fidd ...

  4. 安装多个PHP环境会导致phpinfo和php -v中查看到的PHP版本不一致

    以前在上一个公司用的是集成环境wamp,PHP版本是5.5.后面换了一个公司,项目用的是PHP版本是5.2.今天想打开以前的项目想优化一下,发现pdo_mysql.dll扩展无法加载,于是想看看是不是 ...

  5. Python基础(2) - 动态数据类型

    Python是一门强类型语言,单定义变量时不需要制定类型. C#这样定义变量: ; VB这样定义变量: Python不需要制定类型,给变量赋什么类型的值,它就是什么类型.(穿神马就是神马?) > ...

  6. Python基础(3) - 数据类型:1数字类型

    Python数据类型 数据类型 是否容器 是否可变 存储方式 数字 否 否 直接 字符串 否 否 直接 列表 是 是 顺序 元组 是 否 顺序 字典 是 是 映射 数字类型 整  型:1,234,0, ...

  7. npm update常用命令使用

    一.更新 npm-check检查更新 npm install -g npm-check npm-check 2. npm-upgrade更新 npm install -g npm-upgrade np ...

  8. HDU 5700——区间交——————【线段树+枚举】

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  9. (Forward)5 Public Speaking Tips That'll Prepare You for Any Interview

    Landing a job interview is incredibly exciting –- and often terrifying. But fear not. There are clev ...

  10. 转发与重定向的区别(forward与redirect的区别)

    转发:服务器接收到客户端的请求后,在服务器内部传递的过程.最后回复结果给客户端. 重定向:服务器接收到客户端的请求后,回复一个新url给客户端,客户端跳转新url.