Autorelease对象何时被释放

Run Loop在每个事件循环结束后会去自动释放池将所有自动释放对象的引用计数减一,若引用计数变成了0,则会将对象真正销毁掉,回收内存。

所以,Autorelease对象是在每个事件循环结束后,自动释放池才会对所有自动释放的对象的引用计数减一,若引用计数变成了0,则释放对象,回收内存。因此,若想要早一点释放掉Autorelease对象,那么我们可以在对象外加一个自动释放池。比如,在循环处理数据时,临时变量要快速释放,就应该采用这种方式:

1
2
3
4
5
6
7
for (int i = 0; i < 10000000; ++i) {
@autoreleasepool {
TestModel *tempModel = [[TestModel alloc] init];
// 临时处理
// ...
} // 出了这里,就会去遍历该自动释放池了
}