gpt4 book ai didi

ios - 不再使用时从 UITableViewCell 中移除观察者

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:07:53 25 4
gpt4 key购买 nike

在迁移到 ARC 后,我正在尝试调整我的项目。我目前最大的问题是由于循环引用而没有释放对象。例如。在 UIView 上,不调用 dealloc(我以前用它来释放对象并将它们放在 nil 上,因为这些对象阻止了 dealloc。

对于 UIViews,我可以在“ViewDidDisappear”上做一些逻辑并决定不再需要它,但现在我遇到了 UITableViewCells 的问题。在一个中,我有一个 Notification 观察器,如果创建了观察器,则单元格将保留在内存中。

检测是否不再需要(例如)UITableViewCell 的实例的最佳方法是什么,以便我可以移除观察者并且对象可以从内存中释放自身?

这是我的标题:

@interface DOArticleListCell : DOPrototypeCell {
IBOutlet UILabel *_title;
IBOutlet UILabel *_summary;
IBOutlet UILabel *_site;
IBOutlet UILabel *_update;
IBOutlet UILabel *_unpublished;
IBOutlet UIButton *_readButton;

__weak DOArticle *_article;
NSNumber* _isEditor;
}

@property (nonatomic, weak) DOArticle *article;

- (void)updateReadButton;
- (IBAction)toggleReadButton:(id)sender;

@end

(原型(prototype)单元格只有一个名为“populateCell”的函数。)

附言。我需要观察者在打开选择单元格时调用的 detailViewController 时更新“读取”标签。

最佳答案

您很可能不想在您的手机上使用观察器。为什么不?您的细胞正在被重复使用。假设您的 TableView 中有 400 个项目。在任何给定时间,屏幕上只会显示大约 8 个。这意味着只有 8 或 9 个单元格实例会保留在内存中并在用户滚动时重新使用。这意味着每次单元格滚出 View 时您都必须删除观察器,并且您需要为重新使用的单元格添加一个新的观察器。您可以通过覆盖单元格的 prepareForReuse 方法来做到这一点。但是,保存任何类型的状态(例如将单元格标记为“已读”)不应在单元格中完成,而应在您的模型中完成。

由于在您的情况下,用户操作触发了 read 状态的更新,您可以简单地将数据模型项设置为 tableView:didSelectRowAtIndexPath 中的 read: 然后通过调用自定义单元格上的自定义方法或调用 [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];

显式更新该单元格

希望对您有所帮助。

关于ios - 不再使用时从 UITableViewCell 中移除观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20003146/

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