我知道GC和ARC之间的最大区别在于 GC 是运行时进程,而 ARC 在编译时运行。因此,在使用 ARC 时,开发人员需要在某些情况下处理内存。
根据this,SWFT内存管理架构中没有任何地方可供开发人员互动。
那他们是怎么做到的?他们是否有运行时清理内存的过程,还是有其他的东西?
答案 0 :(得分:5)
Swift以与Objective-C类似的方式使用ARC。 ARC has been discussed广泛。
简而言之:
答案 1 :(得分:0)
我知道GC和ARC之间的最大区别在于GC
请注意,ARC是GC的一种形式。
是运行时进程,而ARC在编译时运行。
跟踪GC和ARC都会在编译时和运行时执行操作。 ARC注入增加和减少引用计数的代码,当计数减少到零时,收集对象并递减它递归指向的所有引用(可能导致无限量的工作在运行时以任意大的方式完成收集对象图。)
因此,在使用ARC时,开发人员需要在某些情况下处理内存。
是。你必须小心避免循环,因为它们永远不会被收集。
答案 2 :(得分:-1)
ARC如何运作
每次创建类的新实例时,ARC都会分配一个块 用于存储有关该实例的信息的内存。这个记忆持有 有关实例类型的信息以及值 与该实例关联的任何存储属性。
此外,当不再需要实例时,ARC释放了 该实例使用的内存,以便内存可以用于其他内存 目的而是。这可确保类实例不会占用 不再需要时在内存中留出空间。
但是,如果ARC要释放仍在使用的实例, 它将不再可能访问该实例的属性, 或者调用该实例的方法。的确,如果你试图访问 例如,您的应用很可能会崩溃。
确保实例在静止时不会消失 需要,ARC跟踪有多少属性,常量和变量 目前指的是每个类实例。 ARC不会解除分配 实例,只要至少有一个对该实例的活动引用 仍然存在。
为了实现这一点,无论何时将类实例分配给a 属性,常量或变量,属性,常量或变量 强烈引用该实例。该引用称为a “强大”的参考,因为它坚定地坚持这个实例,并且 只要那么强大就不允许它被解除分配 参考仍然存在。