自動釋放池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