Swift中的内存管理,具有强而弱的无人参考
对于iOS应用程序,学习内存管理至关重要。 您正在使用Objective C还是Swift,但是您需要熟悉内存管理将如何有所帮助。 从本文开始,我假设您对Objective C以及对OOP的Swift和清晰概念,闭包,可选和属性有一些了解。
基本上,内存管理是引用计数,在Objective C或Swift中,当您在代码中引用变量时,其保留计数会增加,反之亦然。 如果变量的保留计数达到0,则将释放该变量。
您已经知道swift使用ARC(自动引用计数)来管理应用程序的内存使用情况。 因此,您不必自己担心内存管理。 但是,您需要知识来管理代码中的内存,以避免内存泄漏。
当您创建任何新的变量实例时,ARC会分配内存来存储信息,而当不再需要该变量时,ARC将释放分配给该实例的内存。 您需要确保一旦变量被释放,就无法再次访问它,否则您的应用程序将崩溃。
初始化任何变量或对象时调用Init(),而对象的引用计数达到0时,调用deinit()取消对象或变量的分配。 下面,我编写了示例代码以更好地理解。 实际上deinit块是由ARC自动运行的,但是为了更好地理解,我在这里写了详细的文章,介绍了如何编写适当的代码。
我在那篇文章中用代码示例介绍了以下内容:
使用Swift定义属性时,默认会应用强引用。 在Swift中几乎所有地方都使用了强引用。 类的每个新创建的对象都有引用计数器。 将值的属性分配给对象后,它将增加。 在引用计数器的值大于0之前,它不会被释放。
它允许创建实例,但不增加ARC的引用计数。 大多数情况下,参考标记应被标记为较弱,并且比其他类型的参考具有较短的寿命。 如果将其引用设置为nil,则应使用弱引用。 如果没有其他实例强烈引用该实例,则实例将取消分配。
就像弱引用一样,保留计数器不增加1。 与弱引用不同,无主不必是可选的,因为在解除分配时它们不会自动设置为nil。 仅当您知道该实例的对象永远不会为零时,才应使用无主引用。
注意:只要您知道弱引用会在某个时候变为零,就可以使用它。 当您知道其引用一旦初始化就永远不会为零时,使用无主引用。
最后,如果您不管理内存,那么它会使您的应用程序不稳定,并导致大量内存泄漏。 但是通过谨慎地使用弱者和无人者,我们可以管理内存泄漏并放弃内存。
最初发布在 www.logisticinfotech.com