RAC用于UITableViewCell復(fù)用時的問題

UITableViewCellUICollectionViewCell復(fù)用使用RAC的問題,解決復(fù)用cell中信號的辦法就是在cell里面創(chuàng)建的信號加上takeUntil:cell.rac_prepareForReuseSignal來讓cell在每次重用的時候都去
disposable創(chuàng)建的信號(解綁信號)

具體看代碼:

- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1000;
}

- (UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"TableViewCell"];

    @weakify(self);
    [RACObserve(cell.textLabel, text) subscribeNext:^(id x) {
        @strongify(self);
        NSLog(@"%@", self);
    }];

    return cell;
}

我們看到這里的RACObserve創(chuàng)建的Signal和self之間已經(jīng)去掉了循環(huán)引用的問題,所以應(yīng)該是沒有什么問題的。但是結(jié)合之前我們對RACObserve的理解再仔細分析一下,這里的Signal只要self沒有被dealloc的話就不會被釋放。雖然每次UITableViewCell都會被重用,但是每次重用過程中創(chuàng)建的信號確實無法被disposable。那我們該怎么做呢?

- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1000;
}

- (UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"TableViewCell"];

    @weakify(self);
    [[RACObserve(cell.textLabel, text) takeUntil:cell.rac_prepareForReuseSignal] subscribeNext:^(id x) {
        @strongify(self);
        NSLog(@"%@", self);
    }];

    return cell;
}

注意,我們在cell里面創(chuàng)建的信號加上takeUntil:cell.rac_prepareForReuseSignal,這個是讓cell在每次重用的時候都去disposable創(chuàng)建的信號。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 打算在項目中大面積使用RAC來開發(fā),所以整理一些常用的實踐范例和比較完整的api說明方便開發(fā)時隨時查閱 聲明式編程...
    星光社的戴銘閱讀 5,474評論 5 49
  • 2017.02.22 可以練習(xí),每當這個時候,腦袋就犯困,我這腦袋真是神奇呀,一說讓你做事情,你就犯困,你可不要太...
    Carden閱讀 1,490評論 0 1
  • (轉(zhuǎn)載自)http://limboy.me/tech/2013/12/27/reactivecocoa-2.htm...
    GeniusLi閱讀 272評論 0 0
  • 簡介 ReactiveCocoa(簡稱為RAC),RAC具有函數(shù)響應(yīng)式編程特性,由Matt Diephouse開源...
    PHM閱讀 13,103評論 4 53
  • (轉(zhuǎn)載注明來自:http://hparis.github.io/blog/2015/07/25/rache-nei...
    Pariscode閱讀 13,406評論 8 45

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