Iphone ARC与MRC的区别

Iphone ARC与MRC的区别,iphone,memory-management,garbage-collection,automatic-ref-counting,Iphone,Memory Management,Garbage Collection,Automatic Ref Counting,我对苹果的材料感到困惑 我们通过三种方式管理内存,它们是: 自动参考计数 手动参考计数 垃圾收集 我的疑问是,自动参考计数和手动参考计数有什么区别 有人能给我解释一下吗?在ARC中,您不必释放/自动释放您分配的内存,而在手动情况下,您必须注意这一点。 e、 g.手动箱 -(void)someMethod { NSMutableArray *arr = [[NSMutableArray alloc] init]; //use array [arr release]; //

我对苹果的材料感到困惑

我们通过三种方式管理内存,它们是:

  • 自动参考计数
  • 手动参考计数
  • 垃圾收集 我的疑问是,自动参考计数和手动参考计数有什么区别


    有人能给我解释一下吗?

    在ARC中,您不必释放/自动释放您分配的内存,而在手动情况下,您必须注意这一点。 e、 g.手动箱

    -(void)someMethod
    { 
        NSMutableArray *arr = [[NSMutableArray alloc] init];
        //use array
        [arr release]; //when array is in no use
    }
    
    电弧炉

    -(void)someMethod
    {
        NSMutableArray *arr = [[NSMutableArray alloc] init];
        //use array
    }
    

    在ARC中,操作系统负责内存管理,因此您不必担心释放对象。对于初学者来说,它非常整洁。然而,在手动计数中,你必须跟踪内存的释放情况,如果你做得不对,你将导致应用程序崩溃。ARC和MRC在ios中可用,因为垃圾收集仅限于MAC-OSX,希望这有所帮助。Inder给出了一个很好的例子。

    在MRC中,您负责跟踪并确保对象的所有引用都正确地递增、递减和释放。在Obj-C中,您基本上有一套规则来帮助您避免内存泄漏或指针悬空,要确保一切正常运行需要付出相当大的努力,而且这可以通过某种方式实现自动化,就像其他一些语言所使用的那样

    这就是ARC进入游戏的时候

    ARC是MRC运作方式的一个精辟替代品。使用ARC,实例在没有强引用的情况下被解除分配,每个实例都会跟踪自身的强引用和弱引用/无主引用的数量。虽然这看起来像是一种相似的行为,但在这两种情况下所使用的工作量却大不相同,在MRC中,您必须跟踪所有内容,而在ARC中,您唯一应该做的就是避免保留周期

    ARC和垃圾收集器之间的一些区别是:

    • 垃圾收集器是运行时结构的一部分。在ARC中,Swift编译器在应用程序包中进行代码清理和引用跟踪插入
    • 垃圾收集器不会在实例丢失引用时立即回收内存,ARC会这样做
    • 如果某些对象循环(或图形)具有对自身的引用,但无法通过根节点访问,则GC可以清除孔图,而在ARC中,它们永远不会被解除分配,因为它们持有对其他对象的强引用(保留循环)

    如果您想查看更多信息,我发现这篇文章非常有用:

    MRC vs ARC

    ARC
    插入
    retain
    release
    autorelease
    而不是编译时的开发者。现在您不必担心手动内存管理


    好的。谢谢。它们之间有什么区别吗?@user1157838:是的,请注意ARC案例没有[arr释放];。另外请注意,iOS上的垃圾收集不可用。是否有任何使用ARC的设置?是的,转到项目设置->>>目标C自动参考计数。您可以在此处选择是或否,但ankit表示,这仅适用于sdk 4.2以后的版本。在任何版本的ARC支持与否?您的意思是,从sdk 4.2以后,无需发布对象。我们可以创建任意数量的对象。我说的对吗?是的,但创建新项目时必须在项目中启用ARC,否则它将作为的MRC可能的副本工作