ios混淆强/弱的参考
我已经浏览了关于强/弱引用的问题,并理解了使用弱(父母与子女关系)的原因。 但是,我对创build父子关系的特定场景感到困惑。
例如,将子视图添加到UIView对象。创build父/子关系的示例? 什么是?
到目前为止,我在我的项目中使用了强大的function,无处使用了弱点,但我不确定是否会遇到内存pipe理问题(或者甚至如何检查我是否会这样做)。
任何人都可以提供具体的情况或例子,在父母与子女的关系创build?
谢谢!
编辑:事实上,我收到一些“接收到的内存警告”的问题,在我的一个ViewControllers显示大量的数据(地图视图,图像,文本,button数量)。 一切财产都有一个强大的指针。 我需要修复这个ViewController的内存pipe理问题
你的理解是倒退的。 弱引用更常用于实现孩子对父母的关系。 他们很less有意义的亲戚关系。 父母通常拥有孩子; 这意味着强大。
绝大多数时候你想要一个强有力的参考。 这就是为什么它是默认的。 没有强有力的参考的最普遍的原因是如果它会导致保留循环。 例如,如果A对B有强烈的引用,那么如果B对A有很强的引用,那么你将有一个循环,这两个对象都不会被释放。 所以你select一个物体作为主人,并且有很强的参考价值。 另一个对象有一个弱引用。
最常见的情况是委派。 代表几乎总是拥有它委托的东西。 所以委托对象应该对委托有一个弱引用。 作为Objective-C中的一个约定,一个名为delegate
的属性预计会很弱。 (如果这种感觉倒退了,考虑一下你在实践中如何使用UITableView
和UITableViewDelegate
,以及哪一个你想要考虑“所有者”。)
弱委托指针不是一个硬性规则。 有例外如NSURLConnection
。 如果委派对象的寿命比委托的寿命短,那么它可以保持强有力的参考(通常是可取的)。
“接收到的内存警告”不一定与内存pipe理有关。 这只是意味着你使用了太多的内存。 如果你保留了循环,那么你可能正在泄漏内存,这会导致这个警告。 但也可能是因为你只是使用太多的内存。 仪器中的“分配”工具是调查此问题的最佳方法。
虽然“强”和“弱”的实现是Objective-C最近的补充,但是它们只是forms化并为多年来使用手工保留已经做了正确书写的代码提供了更好的语言支持。 所有权模式今天与ARC之前的一样。
有些人提出了一个非常有用的图表,解释何时在“共同编码”广告类上使用弱引用。 它有一些很好的图解释强弱指针的基本内存pipe理。
当你将一个子视图添加到视图中时,父视图将保留它的子视图。 是的,这是父母的子女关系。 如果你正在创build你自己的UIView子类,你将会这样做。
父母与孩子有很强的关系,但孩子不应该和父母有很强的关系。 这可能导致保留周期,既不能释放,因为它们都有很强的联系。
强是默认的,当你使用委托模式时,你会倾向于使用弱。
也许你应该发布有关收到内存警告的问题的更具体的信息,因为这个问题是相当一般的内存语义。