gpt4 book ai didi

iOS:自定义单元格上的 NSRunLoop

转载 作者:行者123 更新时间:2023-11-28 21:36:44 26 4
gpt4 key购买 nike

我在自定义单元格上使用 NSTimer 运行 NSRunLoop 以持续更新“有效至”UILabel。它工作正常,直到我关闭 tableView,NSRunLoop 继续倒计时。我使用 dealloc,但它似乎不会耗尽 NSRunLoopNSTimer

-(void)dealloc {

[[NSNotificationCenter defaultCenter]removeObserver:self];
[_timer invalidate];
CFRunLoopStop(CFRunLoopGetCurrent());
_runner = nil; // NSRunLoop
}

当一个单元格被释放时,我如何终止 NSRunLoop?提前谢谢你。

最佳答案

使用当前运行循环来解决问题会给您带来各种麻烦。解决该问题的最简单方法是在您的单元格上设置一个 NSTimer 属性,并在单元格 willDisplay/willEndDisplay 时启动/停止它。

class CustomCell: UITableViewCell {

var timer: NSTimer?

func startTimer() -> Void {
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateUI:", userInfo: nil, repeats: true)
}

func stopTimer() -> Void {
timer?.invalidate()
timer = nil
}

func updateUI(sender: NSTimer?) -> Void {
// update your label here
}

}

class ViewController: UIViewController, UITableViewDelegate {

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if let cell = cell as? CustomCell {
cell.startTimer()
}
}

func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if let cell = cell as? CustomCell {
cell.stopTimer()
}
}

}

关于iOS:自定义单元格上的 NSRunLoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33656659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com