"内存自动管理" - 怎么样?

时间:2014-06-03 15:24:08

标签: ios garbage-collection swift

我知道GCARC之间的最大区别在于 GC 是运行时进程,而 ARC 在编译时运行。因此,在使用 ARC 时,开发人员需要在某些情况下处理内存。

根据thisSWFT内存管理架构中没有任何地方可供开发人员互动。

那他们是怎么做到的?他们是否有运行时清理内存的过程,还是有其他的东西?

3 个答案:

答案 0 :(得分:5)

Swift以与Objective-C类似的方式使用ARC。 ARC has been discussed广泛。

简而言之:

  1. 没有垃圾收集器。
  2. 只要(强)引用存在,对象就会存在。
  3. 强引用不能循环,否则泄漏内存。使用弱引用来打破周期。

答案 1 :(得分:0)

  

我知道GC和ARC之间的最大区别在于GC

请注意,ARC是GC的一种形式。

  

是运行时进程,而ARC在编译时运行。

跟踪GC和ARC都会在编译时和运行时执行操作。 ARC注入增加和减少引用计数的代码,当计数减少到零时,收集对象并递减它递归指向的所有引用(可能导致无限量的工作在运行时以任意大的方式完成收集对象图。)

  

因此,在使用ARC时,开发人员需要在某些情况下处理内存。

是。你必须小心避免循环,因为它们永远不会被收集。

答案 2 :(得分:-1)

  

ARC如何运作

     

每次创建类的新实例时,ARC都会分配一个块   用于存储有关该实例的信息的内存。这个记忆持有   有关实例类型的信息以及值   与该实例关联的任何存储属性。

     

此外,当不再需要实例时,ARC释放了   该实例使用的内存,以便内存可以用于其他内存   目的而是。这可确保类实例不会占用   不再需要时在内存中留出空间。

     

但是,如果ARC要释放仍在使用的实例,   它将不再可能访问该实例的属性,   或者调用该实例的方法。的确,如果你试图访问   例如,您的应用很可能会崩溃。

     

确保实例在静止时不会消失   需要,ARC跟踪有多少属性,常量和变量   目前指的是每个类实例。 ARC不会解除分配   实例,只要至少有一个对该实例的活动引用   仍然存在。

     

为了实现这一点,无论何时将类实例分配给a   属性,常量或变量,属性,常量或变量   强烈引用该实例。该引用称为a   “强大”的参考,因为它坚定地坚持这个实例,并且   只要那么强大就不允许它被解除分配   参考仍然存在。

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html