自动释放池autorelease pool的释放与消息循环有关ui
void click(int type){ printf("你执行的操做%d \n",type); } int main(int argc, const char * argv[]) { @autoreleasepool { while (YES) { printf("请输入要执行的操做,0结束:"); int n; scanf("%d",&n); //接收用户的输入 等待 阻塞程序的运行 if (n == 0) { printf("程序结束\n"); break; }else{ click(n); continue; } } } return 0; }
应用程序开启->事件发生(例如点击)->转换成一个事件对象->开启autorelease pool->执行咱们的处理代码,代码中生成的临时变量均可以放在pool中->pool销毁->下一次循环spa
主线程内默认有一个开启的消息循环,在事件开启的时候建立自动释放池,在事件结束的时候倾倒释放池线程
for (int i = 0; i < largeNumber; ++i) { @autoreleasepool{ NSString *str = @"Hello World"; str = [str stringByAppendingFormat:@" - %d", i]; str = [str uppercaseString]; NSLog(@"%@", str); } }
在循环中建立了大量的临时对象NSString,在方法没有走完的状况下,每次建立的对象是不会释放的,因此咱们用自动释放池,在每次循环开始的时候把临时变量NSString放到池里,等每次循环结束的时候倾倒池子,从而每次释放释放NSString临时变量。code