标签:
自动释放池autorelease pool的释放与消息循环有关
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销毁->下一次循环
主线程内默认有一个开启的消息循环,在事件开启的时候创建自动释放池,在事件结束的时候倾倒释放池
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临时变量。
标签:
原文地址:http://blog.csdn.net/wangjunling888/article/details/51355841