GCD—NSThread-多線程的基本用法

進程概念: 每個進程中的線程共享內存中內存的資源多線程

多線程概念: 每程序啓動時建立主線程(調用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];
}
相關文章
相關標籤/搜索