重用機(jī)制原理

重用池:2個(gè)NSMutableSet的隊(duì)列,一個(gè)等待使用隊(duì)列,一個(gè)使用中的隊(duì)列。

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

      DSQViewReusePool *pool=[DSQViewReusePool new];// 懶加載或只初始化一次使用
      [pool reset];// 標(biāo)記所有視圖為可重用狀態(tài)

自定義的DSQViewReusePool.h類:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
 
@interface DSQViewReusePool : NSObject
// 從重用池當(dāng)中取出一個(gè)可重用view
- (UIView *)dequeueReuseableView;
// 向重用池中添加一個(gè)視圖
- (void)addUseingView:(UIView *)view;
// 重置方法,將當(dāng)前使用中的視圖移動(dòng)到可重用隊(duì)列中
- (void)reset;
@end
 
NS_ASSUME_NONNULL_END

自定義的DSQViewReusePool.m類:

#import "DSQViewReusePool.h"
@interface DSQViewReusePool()
@property (nonatomic, strong) NSMutableSet *waitUsedQueue;// 等待使用的對(duì)立
@property (nonatomic, strong) NSMutableSet *usingQueue;// 使用中的隊(duì)列
 
@end
@implementation DSQViewReusePool
- (instancetype)init {
    self=[super init];
    if (self) {
        _waitUsedQueue=[NSMutableSet set];
        _usingQueue=[NSMutableSet set];
    }
    return self;
}
 
// 從重用池當(dāng)中取出一個(gè)可重用view
- (UIView *)dequeueReuseableView {
    UIView *view=[_waitUsedQueue anyObject];
    if (!view) {
        return nil;
    } else {
        // 進(jìn)行隊(duì)列移動(dòng)
        [_waitUsedQueue removeObject:view];
        [_usingQueue addObject:view];
        return view;
    }
}
// 向重用池中添加一個(gè)視圖
- (void)addUseingView:(UIView *)view {
    if (!view) {
        return;
    }
    // 添加視圖到使用各種的隊(duì)列
    [_usingQueue addObject:view];
}
// 重置方法,將當(dāng)前使用中的視圖移動(dòng)到可重用隊(duì)列中
- (void)reset {
    UIView *view=nil;
    while ((view=[_usingQueue anyObject])) {
        // 從使用中隊(duì)列移除
        [_usingQueue removeObject:view];
        // 加入等待使用隊(duì)列
        [_waitUsedQueue addObject:view];
    }
}
@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會(huì),身份的轉(zhuǎn)變要...
    余生動(dòng)聽閱讀 10,916評(píng)論 0 11
  • 彩排完,天已黑
    劉凱書法閱讀 4,497評(píng)論 1 3
  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來(lái)的情緒。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了,難過(guò)就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,907評(píng)論 2 7

友情鏈接更多精彩內(nèi)容