我需要澄清一下我是不是应该(可以?)取消分配与视图相关的 UI 元素
Posted
技术标签:
【中文标题】我需要澄清一下我是不是应该(可以?)取消分配与视图相关的 UI 元素【英文标题】:I need some clarification about whether I should (could?) deallocate view-related UI elements or not我需要澄清一下我是否应该(可以?)取消分配与视图相关的 UI 元素 【发布时间】:2015-07-18 07:29:50 【问题描述】:所以我明白,我应该释放我拥有的对象。 (alloc/copy/retain
东西)
而且我也明白(有点?),如果我的某些类中有 @property
和 retain
,或者一些带有 alloc/init 的实例变量,那么我应该编写一个自定义的 dealloc 来确保那些那些会被该类释放。
我不明白的是我应该手动释放cell
对象吗? (因为我是在 cellForRowAtIndexPath
中使用 alloc/init 创建它的?是的,我知道,当 tableView 被释放时应该杀死这些单元格,但我要确定吗?
另外,我可以手动释放UILabel
、UITextField
等吗?我确实知道当您解除分配视图时它们会被杀死,但是我仍然要确定吗?
更新: 是的,感谢有关引用计数的提示,但该项目的确切目的是使用手动内存管理来做一些简单的事情。 有趣的是,现在大多数导师完全跳过这部分,所以像我这样的新手必须自己弄清楚所有这些东西。
【问题讨论】:
【参考方案1】:Objective C 支持Automatic Reference Counting,它为您完成几乎所有的内存管理。我建议您将旧代码迁移到 ARC;这很容易(Xcode 对此有重构支持),它会为您省去很多麻烦。
【讨论】:
感谢提示,但启用 arc 与任务背道而驰【参考方案2】:除非您有一个指向 UI 元素的 strong
/retain
指针,否则它们会在它们离开屏幕后自动释放。
关于cell
s - 你永远不应该dealloc
他们,因为他们打算被重复使用。如果你 dealloc
和 re-init
他们你会在滚动时得到一个REALLY糟糕的表现。
另外,正如Glorfindel 所说,考虑使用ARC(如果您还没有使用),您的生活会轻松很多。
【讨论】:
以上是关于我需要澄清一下我是不是应该(可以?)取消分配与视图相关的 UI 元素的主要内容,如果未能解决你的问题,请参考以下文章