Objective-C中内存管理的混乱?

Objective-C中内存管理的混乱?,objective-c,memory-management,automatic-ref-counting,Objective C,Memory Management,Automatic Ref Counting,我在Objective-C中阅读了有关手动和ARC内存管理的内容。在以下几点中,我对Objective-C中的内存管理哪一个是正确的感到困惑 在ARC和手动内存下,始终在dealloc中nil out属性 管理层 不必在ARC和manual下取消dealloc中的属性 内存管理 在ARC下的dealloc中的nil out属性,但不在手动内存中 管理层 手动内存管理下dealloc中的nil out属性,但 不成弧形 您永远不必“nil”掉属性,您只需在执行手动内存管理时释放它们即可 当您将一

我在Objective-C中阅读了有关手动和ARC内存管理的内容。在以下几点中,我对Objective-C中的内存管理哪一个是正确的感到困惑

  • 在ARC和手动内存下,始终在dealloc中nil out属性 管理层

  • 不必在ARC和manual下取消dealloc中的属性 内存管理

  • 在ARC下的dealloc中的nil out属性,但不在手动内存中 管理层

  • 手动内存管理下dealloc中的nil out属性,但 不成弧形
您永远不必“nil”掉属性,您只需在执行手动内存管理时释放它们即可

当您将一个值设置为nil时,您将无法跟踪原来的值。该旧值存储了对象的地址。现在该对象仍然存在,但您不再知道它的地址,也无法释放它


Release告诉一个对象“我不再使用你了,如果我是最后一个,那么删除你自己”。在ARC中,编译器会自动添加retain和release调用。现在几乎没有任何理由自己手动管理内存了。ARC是一条出路。

在大多数情况下,没有太多理由再使用手动内存管理

但要回答你的问题,不要在dealloc中为零。相反:

  • 在dealloc with ARC中不处理属性
  • 在手动管理中释放dealloc中的强持有属性<代码>[myObject release]

  • 只要使用ARC和快乐的日子


    但是,您至少应该知道这两者之间的区别。

    当您将值设置为nil时,ARC将释放对象。他特别提到的是
    dealoc
    。假设我有一个指向对象的变量
    foo
    。将其设置为
    nil
    将导致编译器添加
    release
    调用。但是这在
    dealoc
    方法中发生,存储
    foo
    的对象本身即将被销毁。这将减少引用计数。无需
    nil
    it。正如我的回答所说:“你永远不必“nil”掉属性”,显然,“你永远不必“nil”掉属性”的范畴太广了。此语句仅适用于对象的
    dealloc
    方法上下文中的对象自身属性。但是在
    dealloc
    中,您经常
    nil
    任何
    弱的
    不安全的\u未恢复的
    对被解除分配的对象的引用(例如,代理、通知、KVO等的常见引用)。同样,在
    dealloc
    的上下文之外,您可以始终使用
    nil
    属性。但是你的观点很好,在
    dealoc
    ,您不必需要
    nil
    对象的任何属性(但是在MRC中,您必须
    release
    thes)。是的,我的陈述是在问题的上下文中进行的。如果您觉得您的问题已经得到了回答,请接受其中一个事实的答案,回顾你所有的问题,看看有没有可以接受的答案。您不接受任何问题的任何答案。看见