進程概念: 每個進程中的線程共享內存中內存的資源多線程
多線程概念: 每程序啓動時建立主線程(調用main來啓動)異步
/*********線程的建立與啓動********/async
1.第一種開啓新的線程調用mutableThreadspa
NSThread *t = [[NSThread alloc] initWithTarget:self selector:@selector(mutableThread) object:nil];
[t start]; // 須要手動開啓
2.第二種開啓新的線程調用mutableThread
[NSThread datachNewThreadSelector:@selector(mutableThread)
toTarget:self withObject:nil];
3.第三種開啓新的線程調用mutableThread
[self performSelectorInBackground:@selector(mutableThread)
withObject:nil];
4.block語法啓動一個線程
NSOperationQueue *threadQueue = [[NSOperationQueue alloc]init]; [threadQueue addOperationWithBlock:^(void){ NSThread *t = [NSThread currentThread]; }];
5.NSOperation開啓一個線程
// 開啓隊列 NSOperationQueue *threadQueue = [[NSOperationQueue alloc]init]; // 建立線程 NSInvocationOperation *op = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(mutableThread) object:nil]; // 加入隊列 [threadQueue addOperation:op]; // 回到主線程調用reloadData方法 [self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
/********多線程NSThread的經常使用方法********/
// 判斷當前線程是否多線程 + (BOOL)isMultiThreaded; // 獲取當前線程對象 + (NSThread *)currentThread; // 使當前線程睡眠指定的時間,單位爲秒 + (void)sleepForTimeInterval:(NSTimeInterval)ti; // 退出當前線程 + (void)exit; // 判斷當前線程是否爲主線程 + (BOOL)isMainThread // 啓動該線程 - (void)start
/********GCD*******/ //----------------GCD的詳細說明 http://baike.soso.com/v7548422.htm //GCD(Grand Central Dispatch)是一個大的主題。它能夠提升代碼的執行效率與多核的利用率
// 建立一個隊列 dispatch_queue_t queue = dispatch_queue_create("test", NULL); // 建立異步線程 dispatch_async(queue, ^{ // 多線程 // 回到主線程執行 dispatch_sync(dispatch_get_main_queue(), ^{ // 主線程 }); dispatch_sync(queue, ^{ // 在當前線程執行 }); });
/********自動釋放池********/
// 子線程的內存管理 // 建立子線程 [self performSelectorInBackground:@selector(mutableThread) withObject:nil]; - (void)mutableThread { // 建立自動釋放池 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // 池中存放各類代碼 // 池中存放各類代碼 [pool release]; }