前言
关于 Lock 的使用,最早接触的要数 @sysnc
NSLock
@interface NSLock : NSObject <NSLocking> {
@private
void *_priv; // 私有的成员变量 _priv
}
@protocol NSLocking
- (void)lock; // 上锁
- (void)unlock; // 解锁
@end
- (BOOL)tryLock; // 尝试加锁
- (BOOL)lockBeforeDate:(NSDate *)limit; // 某个时间之前加锁
// 名字
@property (nullable, copy) NSString *name API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
关于 NSLock 的代码就这么多,是不是有点意外呢,这么强大的类,只暴露了这点代码出来。
NSConditionLock
@interface NSConditionLock : NSObject <NSLocking> {
@private
void *_priv; // 私有的成员变量 _priv
}
// 指定初始化方法
- (instancetype)initWithCondition:(NSInteger)condition NS_DESIGNATED_INITIALIZER;
// 只读,
@property (readonly) NSInteger condition;
// 加锁当 condition
- (void)lockWhenCondition:(NSInteger)condition;
- (BOOL)tryLock; // 尝试加锁
- (BOOL)tryLockWhenCondition:(NSInteger)condition; // 尝试加锁当 condition
- (BOOL)lockBeforeDate:(NSDate *)limit; // limit 时间之前加锁
- (BOOL)lockWhenCondition:(NSInteger)condition beforeDate:(NSDate *)limit; // 时间和 condition 加锁
// 名字
@property (nullable, copy) NSString *name API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
关于 NSConditionLock 暴露出的代码就这么多。
NSRecursiveLock
@interface NSRecursiveLock : NSObject <NSLocking> {
@private
void *_priv; // 私有成员变量 _priv
}
- (BOOL)tryLock; // 尝试加锁
- (BOOL)lockBeforeDate:(NSDate *)limit; // limit 时间之前加锁
由于最近较忙,待续...