重用机制原理

重用池:2个NSMutableSet的队列,一个等待使用队列,一个使用中的队列。

自定义的重用池使用方法:

      DSQViewReusePool *pool=[DSQViewReusePool new];// 懒加载或只初始化一次使用
      [pool reset];// 标记所有视图为可重用状态

自定义的DSQViewReusePool.h类:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
 
@interface DSQViewReusePool : NSObject
// 从重用池当中取出一个可重用view
- (UIView *)dequeueReuseableView;
// 向重用池中添加一个视图
- (void)addUseingView:(UIView *)view;
// 重置方法,将当前使用中的视图移动到可重用队列中
- (void)reset;
@end
 
NS_ASSUME_NONNULL_END

自定义的DSQViewReusePool.m类:

#import "DSQViewReusePool.h"
@interface DSQViewReusePool()
@property (nonatomic, strong) NSMutableSet *waitUsedQueue;// 等待使用的对立
@property (nonatomic, strong) NSMutableSet *usingQueue;// 使用中的队列
 
@end
@implementation DSQViewReusePool
- (instancetype)init {
    self=[super init];
    if (self) {
        _waitUsedQueue=[NSMutableSet set];
        _usingQueue=[NSMutableSet set];
    }
    return self;
}
 
// 从重用池当中取出一个可重用view
- (UIView *)dequeueReuseableView {
    UIView *view=[_waitUsedQueue anyObject];
    if (!view) {
        return nil;
    } else {
        // 进行队列移动
        [_waitUsedQueue removeObject:view];
        [_usingQueue addObject:view];
        return view;
    }
}
// 向重用池中添加一个视图
- (void)addUseingView:(UIView *)view {
    if (!view) {
        return;
    }
    // 添加视图到使用各种的队列
    [_usingQueue addObject:view];
}
// 重置方法,将当前使用中的视图移动到可重用队列中
- (void)reset {
    UIView *view=nil;
    while ((view=[_usingQueue anyObject])) {
        // 从使用中队列移除
        [_usingQueue removeObject:view];
        // 加入等待使用队列
        [_waitUsedQueue addObject:view];
    }
}
@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,620评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,331评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 126,225评论 2 7