ios混淆了强/弱引用



我已经仔细研究了关于强/弱引用的问题,并理解了使用弱引用(父子关系)的原因。然而,我对创建父子关系的特定场景感到困惑。

例如,正在向UIView对象添加子视图。。创建父子关系的示例?什么是?

到目前为止,我在我的项目中都使用了strong,我从未使用过weak,但我不确定我是否会遇到内存管理问题(或者如何检查我是否会)。

有人能提供具体的情况或例子来建立亲子关系吗?

谢谢!

编辑:事实上,我在一个显示大量数据(地图视图、图像数量、文本、按钮)的ViewController中遇到了一些"收到内存警告"问题。Everything属性具有强指针。我需要修复此ViewController 的内存管理问题

您的理解是倒退的。弱引用更常用于实现父子关系。对于父母和孩子的关系来说,它们几乎没有意义。一般来说,父母拥有孩子;这意味着强大。

绝大多数时候你都想要一个强有力的参考。这就是为什么它是默认的。不具有强引用的最常见原因是它是否会导致保留循环。例如,如果A对B有强引用,那么如果B对A有强引用——你会有一个循环,两个对象都不会被释放。所以你选择其中一个对象作为所有者,它有很强的引用。另一个对象具有弱引用。

这种情况最常见的是委派。委托人几乎总是拥有它所委托的东西。因此,委派对象应该具有对委派的弱引用。作为Objective-C中的惯例,一个名为delegate的属性被认为是弱的。(如果这感觉是倒退的,请考虑在实践中如何使用UITableViewUITableViewDelegate,以及您希望将哪一个视为"所有者"。)

弱委托指针不是一条硬性规则。也有例外,例如NSURLConnection。如果委派对象的生存期比委派对象短,那么它可以(通常更可取)维护一个强引用。

"收到内存警告"不一定与内存管理有关。这只是意味着你用的内存太多了。如果您有保留循环,那么您可能正在泄漏内存,这将导致此警告。但这也可能是因为你只是使用了太多的内存。仪器中的"分配"工具是调查这一问题的最佳方式。

虽然"强"one_answers"弱"的实现是Objective-C的最新添加,但它们只是形式化了,并为多年来正确编写的代码提供了更好的语言支持,并保留了手动代码。今天的所有权模式与ARC之前完全相同。

有些人制作了一个非常有用的图表,解释何时在"Coding together"Piazza类上使用弱引用。它有一些很棒的图表,用强/弱指针解释基本的内存管理。

http://piazza-uploads.s3-website-us-east-1.amazonaws.com/attach/h3ex5vh7htrh9/h4777mrpwp17bg/h4777tczi147de/Views,%20Outlets,%20Weak%20References.pdf

将子视图添加到视图时,父视图将保留其子视图。是的,这是父子关系。如果您正在创建自己的UIView子类,您也将执行同样的操作。

父母与孩子有着牢固的关系,但孩子永远不应该与父母有牢固的关系。这可能导致保留循环,两者都不能被释放,因为它们彼此之间都有很强的联系。

"强"是默认值,在使用委托模式时,您将倾向于使用"弱"。

也许你应该发布更多关于你收到的内存警告问题的具体信息,因为这个问题是关于内存语义的。

相关内容

  • 没有找到相关文章

最新更新