我正在阅读一些书(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
上面的所有对象被正确销毁。
我的问题是:
items = nil
- 这是否意味着
我会有内存泄漏吗?我通过重写BNRItem的dealloc并打印一些信息来测试,即使我没有设置items = nil
,dealloc似乎也适用于所有BNRitems。
答案 0 :(得分:2)
不,它不会泄漏。当ARC超出范围时,ARC将执行释放消息。时序/顺序不是特定于优化目的。从技术上讲,它可以自由使用自动释放。
答案 1 :(得分:1)
设置nil
的引用告诉ARC您已完成它并允许它立即清理。不将其设置为nil
并不意味着它不会被清理,它可能不会那么快就被清除。
您还需要注意测试中的局部变量之间的区别(因为它们总是在定义范围的末尾清除)和实例变量(如果没有填充,它们可以与拥有的实例一样长寿)