关于 iOS 开发中 Lock 的超详细分析

前言

关于 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 时间之前加锁

由于最近较忙,待续...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,638评论 25 708
  • 闲了4个月,终于要干正事了!想着每天都要写些东西,来记录每天的心路历程。今天去了超市购置了一大堆东西,甚至连明晚的...
    欧大白阅读 235评论 0 0
  • 关于朋友圈这件事,我也确实有点话想说。因为这个比扣扣空间还糟心。 比如曾经一段时间关过朋友圈,原因是因为加的同事太...
    潇雨姑娘阅读 227评论 0 1