属性锁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
属性锁TimeLock的更多相关文章
- python with 线程锁
import threading import time num = 0 # 全局变量多个线程可以读写,传递数据 mutex = threading.RLock() # 创建一个锁 class Myt ...
- EFFECTIVE OBJECTIVE-C 2.0 TIPS 总结 CHAPTER 1 & CHAPTER 2
下面只是对读到的所有 Tips 结合我平时开发中遇到的问题进行总结,每一个 Tips 和书中的每一条对应,本文的目的是去掉书中的大部分讨论的内容,让人能够马上使用这些 Tips,建议阅读过原书后食用更 ...
- Elasticsearch相关配置(二)
一.关于elasticsearch的基本概念 term 索引词,在elasticsearch中索引词(term)是一个能够被索引的精确值.foo,Foo Foo几个单词是不相同的索引词.索引词(ter ...
- ECMASCRIPT5新特性(转载)
Function 1: Object.create 这是一个很重要的改动,现在我们终于可以得到一个原型链干净的对象了.以前要创建一个类 function Cat(name) { this.name ...
- Elasticsearch 学习总结 - 相关配置补充说明
一. Elasticsearch的基本概念 term索引词,在elasticsearch中索引词(term)是一个能够被索引的精确值.foo,Foo Foo几个单词是不相同的索引词.索引词(ter ...
- xml 及其语法
先说一些关于框架,开发中的框架,主要是用反射技术来封装数据. 先指定规范写出xml,然后通过读写流技术封装好一些API用来映射xml文件,方便取得xml中的配置信息.取得xml内容就可以通过取得的内容 ...
- python 银行系统
目前代码只写到这 主要部分已经实现 功能部分展现 首先我们需要五个类 用户类 : 成员属性 name id 以及 card 卡类: 成员属性 卡号 密码 余额 锁 界面类: 管理员界 ...
- 《图解HTTP》笔记
web网络基础 概述 Web是建立在HTTP(超文本传输协议)上通信的 通常使用的网络(包括互联网)是在TCP/IP基础上运作的,HTTP属于它的内部子集 TCP/IP协议 协议族 计算机与网络设备要 ...
- javascript入门 之 zTree(十四 增删查改)(二)
<!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - addNodes / editName / rem ...
随机推荐
- C# DataTable 用法
1.创建DataTable DataTable dataTable = new DataTable(); //创建一个空表 2.创建DataRow DataRow row = dataTable.Ne ...
- 使用Redis实现锁(支持分布式应用)(整理网络资料)
使用Redis实现锁(支持分布式应用) 1. 简介 使用Redis指令setnx.expire.getset等操作实现互斥资源的访问 本文内容来着网络整理,参考: http://www.linu ...
- 【Lua】Lua + openresty遍历文件目录
OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器,它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. 今天用OpenRest ...
- c#,利用WPF的ScaleTransform和TranslateTransform实现图片的缩放效果
一.缩放要求 1.缩放对象在可视区域内,已对象的中心点进行缩放. 2.缩放对象比可视区大,并且对象各边界都在可视区外围,那么已鼠标位置进行缩放. 3.缩放对象比可视区大,但是缩放后某一边界在可视区的对 ...
- Java入门系列-27-反射
咱们可能都用过 Spring AOP ,底层的实现原理是怎样的呢? 反射常用于编写工具,企业级开发要用到的 Mybatis.Spring 等框架,底层的实现都用到了反射.能用好反射,就能提高我们编码的 ...
- step7: 输出到json文件
调用scrapy自身的Exporter输出 编辑pipeline文件 import json from scrapy.exporters import JsonItemExporter #引入Expo ...
- java中四种引用类型(对象的强、软、弱和虚引用)
对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2 ...
- [转] 多种方法查看Oracle SQL执行计划
本文转自:http://falchion.iteye.com/blog/616234 一.在线查看执行计划表 如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/u ...
- 此请求的URL的长度超过配置的maxUrlLength值
aps.net 网站的url长度默认限制为260个字符. 修改web.config即可 <system.web> <httpRuntime maxUrlLength=" ...
- .Net程序员玩转Android系列之二~Android Framework概要(1)
从windows操作系统说起 人们总是喜欢从将陌生的事物和自己所了解的东西关联起来,以加深对未知事物的了解,这一讲我们从windows操作系统说起,逐步引领带大家走入android的世界.写任何程序都 ...