ios - 对于 iOS 版 Swift,我们应该做多少清理工作?

标签 ios swift

作为一名新开发人员,我有点不确定在 iOS 上使用 Swift 后我们应该清理多少内容。有很多不同的信息,因为自 iOS 诞生以来,这也发生了很大的变化。

因此,当我们拥有静态 View 并使用 Storyboard时,我觉得一切都已为我们清理干净,我们(几乎)不需要做任何事情。

但是当我根据用户点击动态创建 View 时会怎样呢?如果有必要,清除引用的最佳方法是什么?

现在,我就像在 Android 中一样,只需在创建 View 等的新实例之前将全局引用设置为 nil。我读过应该这样做:

myView?.removeFromSuperview()

最佳答案

尽管 Swift 使用的自动引用计数方法与 Java 的垃圾收集方法有很大不同,但程序员的感觉却惊人地相似。一方面,你必须意识到在 Swift 中创建循环引用的可能性,并插入弱引用以避免循环。另一方面,您可以依靠在释放最后一个引用后立即释放资源,并使用 deinit 方法来处理清理工作。

But what about when I create my view dynamically

动态创建 View 并将它们添加到 Cocoa 的 View 层次结构中,可以确保当 View 层次结构决定不再需要它们时,您的 View 将被释放。

在 Cocoa 回收 View 的情况下,你必须小心,例如当您将 View 添加到 TableView 单元格或 Collection View 单元格时。由于单元格被回收,您需要 (1) 删除添加的 View 以避免再次添加它们,或者 (2) 检查 View 是否已添加,并重用已有的 View 。

回收单元格时删除添加的 View 的一种方法是实现 prepareForReuse 方法,并删除其中添加的 View 。

关于ios - 对于 iOS 版 Swift,我们应该做多少清理工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37810217/

相关文章:

ios - 使用 NSFileHandle 覆盖数据

ios - 读取RSSI是否会导致对BLE设备的任何空中请求?

ios - FFMPEG 创建模糊视频

ios - Swift 解析不更新核心数据

swift - @objc'只能应用于类的扩展,从swift调用扩展方法到objective c

ios - 在 swift4 中使用 shouldPerformSegue(withIdentifier, sender) 方法时出错

ios - Storyboard 不允许我在 UIViewController 中选择项目

ios - Alamofire 从多个请求中取消一个请求

ios - 核心数据 ios9 : multifield unique constraint

ios - 如何使用 Swift 向 UITableView 添加项目?