内存管理iOS / ARC

时间:2013-07-16 09:20:14

标签: objective-c

我正在阅读一些书(link),上面写着:“所有这些自动清理和内存回收只需将items设置为nil就可以了。这就是ARC的强大功能。 “。 这是关于以下代码:

    // create array
    NSMutableArray *items = [[NSMutableArray alloc] init];  

    // add random BNRItems to the array
    for (int i = 0; i < 10; i++) {
        BNRItem *p = [BNRItem randomItem];  
        [items addObject:p];  
    }

    // print items in array
    for (BNRItem *item in items) {
        NSLog(@"%@", item);
    }



    items = nil;

它基本上简要地解释了如何通过设置items = nil上面的所有对象被正确销毁。 我的问题是:

  • 说我正在使用ARC,我没有设置items = nil - 这是否意味着 我会有内存泄漏吗?

我通过重写BNRItem的dealloc并打印一些信息来测试,即使我没有设置items = nil,dealloc似乎也适用于所有BNRitems。

2 个答案:

答案 0 :(得分:2)

不,它不会泄漏。当ARC超出范围时,ARC将执行释放消息。时序/顺序不是特定于优化目的。从技术上讲,它可以自由使用自动释放。

答案 1 :(得分:1)

设置nil的引用告诉ARC您已完成它并允许它立即清理。不将其设置为nil并不意味着它不会被清理,它可能不会那么快就被清除。

您还需要注意测试中的局部变量之间的区别(因为它们总是在定义范围的末尾清除)和实例变量(如果没有填充,它们可以与拥有的实例一样长寿)

相关问题