使用GCD实现多线程

GCD是Grand Central Dispatch的简称,是建立在BSD层面上的接口,在Mac 10.6和iOS4.0之后才引入的。而且现在的NSOperation与NSoperationQueue的多线程实现就是基于GCD实现的。目前这个特性被移植到了FreeBSD上了,可以查看libdispatch这个开源项目。

在使用GCD 之前,先添加libsystem.dylib动态加载库,在头文件引入#import《dispatch/dispatch.h》,之后就可以程序中使用GCD了

下面以我的程序中的一个代码片段为例:

先创建线程实例:dispatch_queue_t  network_queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

将需要处理大量数据,费时的代码放进次级线程

 dispatch_async(network_queue, ^{
        NSString *secondHtml=[[[NSString alloc]init]autorelease];
        NSURL *url=[NSURL URLWithString:@"http://map.mapbar.com/"];
        self.parseHtml=[[ParserHtml alloc]initWithHtml:url andTag:@"a"];
        //得到对应城市名的第二个页面地址
        secondHtml=[self.parseHtml ParserHtml];
        NSString *text=[[[NSString alloc]init]autorelease];
        text=[self.parseHtml ParseSecondHtml:[NSURL URLWithString:secondHtml] andTag:@"_3"];
        NSLog(@"%@",text);
        //返回主线程
        dispatch_async(dispatch_get_main_queue(), ^{
            //设置标题
            jidiaoAppDelegate *single=[[UIApplication sharedApplication]delegate];
            self.title=[single.cityName stringByAppendingString:@"历史"];
            
            self.textView =[[UITextView alloc]initWithFrame:CGRectMake(10, 10, 300, 400)];
            self.textView.text=text;
            self.textView.delegate=self;
            self.view.backgroundColor=[UIColor blueColor];
            self.textView.textAlignment=UITextAlignmentLeft;
            [self.view addSubview:self.textView];
        });
    });
以上内容是我的个人见解,由于刚刚接触到多线程,不免有很多瑕疵,以及术语的错误,还望多多指教。

更多内容,请访问:http://geeklu.com/2012/02/thread/

http://www.cnblogs.com/scorpiozj/archive/2011/07/25/2116459.html


你可能感兴趣的:(iOS)