關(guān)于RunLoop Task模式實(shí)現(xiàn)列表優(yōu)化

原理:

RunLoop在循環(huán)過(guò)程中監(jiān)聽(tīng)著port事件和timer事件,
當(dāng)前線(xiàn)程有任務(wù)時(shí)怖辆,喚醒當(dāng)當(dāng)線(xiàn)程去執(zhí)行任務(wù)掌测,
任務(wù)執(zhí)行完成以后,使當(dāng)前線(xiàn)程進(jìn)入休眠狀態(tài)。

代碼:.h

//
//  LWQ_RunloopTableView.h
//  BathoathProject
//
//  Created by 葫蘆娃 on 2021/6/17.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

typedef void(^LoadOtherBlock)(id arguments);

@interface LWQ_RunloopTableView : UIViewController
//task模式優(yōu)化列表
@property(nonatomic, strong) NSMutableArray *taskArray;
@property(nonatomic, assign) NSInteger maxTaskNumber;
@property(nonatomic, strong) NSTimer *timer;
@property(nonatomic, strong) UITableView *tableView;
@property(nonatomic, copy)LoadOtherBlock mainBlock;
- (void)addTask;
@end

NS_ASSUME_NONNULL_END

.m

//
//  LWQ_RunloopTableView.m
//  BathoathProject
//
//  Created by 葫蘆娃 on 2021/6/17.
//

#import "LWQ_RunloopTableView.h"

@interface LWQ_RunloopTableView ()<UITableViewDelegate,UITableViewDataSource>


@end

@implementation LWQ_RunloopTableView

- (void)viewDidLoad {
    [super viewDidLoad];
//最大任務(wù)數(shù)
    self.maxTaskNumber=10;
    self.taskArray=[NSMutableArray new];
//定時(shí)器不斷循環(huán)task
    self.timer = [NSTimer scheduledTimerWithTimeInterval:0.01 repeats:YES block:^(NSTimer * _Nonnull timer) {
        NSLog(@"timer");
        void(^task)() = [self.taskArray firstObject];
        if (task) {
            task();
        }
        [self.taskArray removeObject:task];
    }];
}
//RuntLoop列表優(yōu)化
- (UITableView *)tableView{
    if (!_tableView) {
        _tableView=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, KscreenWidth, KscreenHeight) style:UITableViewStylePlain];
        _tableView.delegate=self;
        _tableView.dataSource=self;
        _tableView.backgroundColor=[UIColor whiteColor];
        _tableView.estimatedRowHeight=100;
    }
    return _tableView;
}
- (void)addTask{
    void(^task)(void) =^{
        self.mainBlock(@"");
    };
  //添加任務(wù)
    [self.taskArray addObject:task];
    //超過(guò)任務(wù)數(shù)則刪除任務(wù)
    if (self.taskArray.count == self.maxTaskNumber) {
        [self.taskArray removeObjectAtIndex:0];
    }
}


@end

//使用
繼承于LWQ_RunloopTableView創(chuàng)建controller

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

里調(diào)用[self addTask];
調(diào)用Block

self.mainBlock = ^(id  _Nonnull arguments) {
        //你自己的cell賦值等處理
    };
//例如
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    LWQ_TableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"LWQ_TableViewCell" forIndexPath:indexPath];
    if (!cell) {
        cell=[[LWQ_TableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"LWQ_TableViewCell"];
    }
    [self addTask];
    self.mainBlock = ^(id  _Nonnull arguments) {
//你自己的代碼
        cell.mainImageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"name" ofType:@"gif"]];
    };
    return cell;
}

文件位置
https://gitee.com/1023678795/runloop.git

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末字币,一起剝皮案震驚了整個(gè)濱河市辅斟,隨后出現(xiàn)的幾起案子徊都,更是在濱河造成了極大的恐慌郭怪,老刑警劉巖支示,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鄙才,居然都是意外死亡颂鸿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)攒庵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嘴纺,“玉大人,你說(shuō)我怎么就攤上這事叙甸∮币剑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵裆蒸,是天一觀的道長(zhǎng)熔萧。 經(jīng)常有香客問(wèn)我,道長(zhǎng)僚祷,這世上最難降的妖魔是什么佛致? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮辙谜,結(jié)果婚禮上俺榆,老公的妹妹穿的比我還像新娘。我一直安慰自己装哆,他們只是感情好罐脊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蜕琴,像睡著了一般萍桌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凌简,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天上炎,我揣著相機(jī)與錄音,去河邊找鬼雏搂。 笑死藕施,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凸郑。 我是一名探鬼主播裳食,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼芙沥!你這毒婦竟也來(lái)了胞谈?” 一聲冷哼從身側(cè)響起尘盼,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烦绳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體配紫,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡径密,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了躺孝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片享扔。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖植袍,靈堂內(nèi)的尸體忽然破棺而出惧眠,到底是詐尸還是另有隱情,我是刑警寧澤于个,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布氛魁,位于F島的核電站,受9級(jí)特大地震影響厅篓,放射性物質(zhì)發(fā)生泄漏秀存。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一羽氮、第九天 我趴在偏房一處隱蔽的房頂上張望或链。 院中可真熱鬧,春花似錦档押、人聲如沸澳盐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)叼耙。三九已至,卻和暖如春掀淘,著一層夾襖步出監(jiān)牢的瞬間旬蟋,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工革娄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倾贰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓拦惋,卻偏偏與公主長(zhǎng)得像匆浙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子厕妖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 小編的語(yǔ)言表達(dá)能力不是很強(qiáng),希望看到的大佬能理解我的意思软能,如果有什么問(wèn)題歡迎各位大佬評(píng)論區(qū)留言迎捺。 這里有對(duì)NSTh...
    陶小亮閱讀 1,644評(píng)論 0 3
  • 級(jí)別方面:iOS中級(jí):基礎(chǔ)70%,底層原理20%查排,架構(gòu)10%iOS高級(jí):基礎(chǔ)10%凳枝,底層原理50%,架構(gòu)20%跋核,算...
    你飛躍俊杰閱讀 7,268評(píng)論 4 45
  • 點(diǎn)贊再看岖瑰,養(yǎng)成習(xí)慣,白嫖不好砂代,歡迎大家關(guān)注我面試小專(zhuān)欄 : iOS中高級(jí)進(jìn)階之路 有我準(zhǔn)備的一線(xiàn)大廠面試資料和簡(jiǎn)歷...
    iOS弗森科閱讀 4,307評(píng)論 1 35
  • 表情是什么蹋订,我認(rèn)為表情就是表現(xiàn)出來(lái)的情緒。表情可以傳達(dá)很多信息刻伊。高興了當(dāng)然就笑了露戒,難過(guò)就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 125,012評(píng)論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者娃圆,不喜歡去冒險(xiǎn)玫锋,但是人生放棄了冒險(xiǎn),也就放棄了無(wú)數(shù)的可能讼呢。 ...
    yichen大刀閱讀 6,049評(píng)論 0 4