什么时候需要手动创建自动释放池?
1、如果在循环中创建了大量的临时变量的时候需要在循环一开始就手动创建一个自动释放池
2、如果你生成一个子线程的时候,要在线程开始执行的时候,尽快创建一个自动释放池.否则会内存泄露.因为子线程无法访问主线程的自动释放池.
// 解读:这段代码有什么问题?
for (int i = 0; i < 1000000; ++i) {
NSString *str = @"Hello World";
str = [str stringByAppendingFormat:@" - %d", i];
str = [str uppercaseString];
}
/*
问题:for循环里面创建了大量的临时变量存储在堆区,虽然变量每次都出for循环的作用域,但不会被销毁,因此会导致内存暴涨。
*/
// 解决:每一次循环都加个自动释放池,每次循环之后都释放临时变量。
for (int i = 0; i < 100000000; ++i) {
@autoreleasepool {
NSString *str = @"Hello World";
str = [str stringByAppendingFormat:@" - %d", i];
str = [str uppercaseString];
}
}
// 注意:如果循环里面是基本数据类型,则不需要,它是系统自动管理的,出了作用域就释放,我们只需要考虑“对象”即可