【发布时间】:2019-04-25 00:59:15
【问题描述】:
this WWDC14 presentation 第 17 页上写着
使用 Objective-C?仍然需要管理自动释放池
autoreleasepool { /* 代码 */ }
这是什么意思?这是否意味着如果我的代码库没有任何 Objective-C 文件,autoreleasepool {} 是不必要的?
在an answer of a related question 中,有一个autoreleasepool 可能有用的示例:
- (void)useALoadOfNumbers {
for (int j = 0; j < 10000; ++j) {
@autoreleasepool {
for (int i = 0; i < 10000; ++i) {
NSNumber *number = [NSNumber numberWithInt:(i+j)];
NSLog(@"number = %p", number);
}
}
}
}
如果上面的代码被翻译成 Swift 并删除了 autoreleasepool,那么 Swift 是否会足够聪明地知道 number 变量应该在第一个 } 之后被释放(就像其他一些语言一样)?
【问题讨论】:
-
在 Swift 中似乎没有关于
autoreleasepool的文档。我expanded on your question and asked it in the dev forums.