ios对强/弱参考感到困惑

我查看了关于强/弱引用的问题,并了解使用弱(父对子关系)的原因.但是,我对创建父对子关系的特定场景感到困惑.

例如,是否将子视图添加到UIView对象中…创建父/子关系的示例?什么是?

到目前为止,我在我的项目中使用强大的一切,我没有使用弱,但我不确定我是否会遇到内存管理问题(或者如何检查我是否会).

任何人都可以提供创建父母与子女关系的具体情况或示例吗?

谢谢!

编辑:事实上,我的一个ViewControllers中出现了一些“接收内存警告”问题,显示了大量数据(地图视图,图像数量,文本,按钮). Everything属性一个强大的指针.我需要修复此ViewController的内存管理问题

解决方法

你的理解是倒退的.弱引用更常用于实现子到父关系.对于父母与孩子的关系,他们很少有意义.一般来说,父母拥有孩子;这意味着强大.

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

最常见的情况是授权.代表几乎总是拥有委托给它的东西.因此委托对象应该具有对委托的弱引用.作为Objective-C中的约定,一个名为delegate的属性预计会很弱. (如果这感觉倒退,请考虑一下如何在实践中使用UITableView和UITableViewDelegate,以及您想要将其视为“所有者”.)

弱委托指针不是一个严格的规则.有一些例外,例如NSURLConnection.如果委托对象的生命周期比委托更短,则可以保持强引用(通常更可取).

“已接收内存警告”不一定与内存管理有关.这只是意味着你使用了太多的内存.如果你有保留循环,那么你可能会泄漏内存,这将导致此警告.但也可能是因为你只是在使用太多的内存.仪器中的“Allocations”工具是调查此问题的最佳方法.

虽然“强”和“弱”的实现是Objective-C最近的新增功能,但它们只是正式化并为正确编写的代码多年来手动保留的代码提供了更好的语言支持.今天的所有权模式与ARC之前的相同.

相关文章

在有效期内的苹果开发者账号(类型为个人或者公司账号)。还...
Appuploader官网--IOS ipa上传发布工具,证书制作工具跨平台...
苹果在9月13号凌晨(北京时间)发布 iOS 16,该系统的设备可...
计算机图形学--OpenGL递归实现光线追踪
Xcode 14打出来的包在低版本系统运行时会崩溃,报错信息是Li...