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