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

进程概念: 每一个进程中的线程共享内存中内存的资源

多线程概念: 每程序启动时创建主线程(调用main来启动)

 

/*********线程的创建与启动********/

1.第一种开启新的线程调用mutableThread

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];
}
posted @ 2013-11-01 10:08  needly  阅读(355)  评论(0编辑  收藏  举报