IOS线程的使用 performSelectorOnMainThread

·使用线程可以把占据时间长的 程序中的 任务放到 后台去处理
·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
· 程序的运行速度可能加快
·在一些等待的 任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种 情况下可以释放一些珍贵的资源如 内存占用等等。


performSelectorOnMainThread 方法。

NSAutoreleasePool *pool =[[NSAutoreleasePool alloc] init];

        [self performSelectorOnMainThread:@selector(RefreshCellForLiveId:)

                               withObject:userinfo

                            waitUntilDone:YES];

        [pool release];


该方法的作用是在主线程中,执行制定的方法(代码块)。

参数:

@selector(RefreshCellForLiveId:)就是,要定义我们要执行的方法。

withObject:userinfo

定义了,我们执行RefreshCellForLiveId:方法时,传入的参数对象。类型是id。(我们可以传入任何参数)

waitUntilDone:YES];

指定,当前线程是否要被阻塞,直到主线程将我们制定的代码块(RefreshCellForLiveId:方法)执行完。


注意:

1.当前线程为主线程的时候,waitUntilDone:YES参数无效。

2.该方法,没有返回值

3.<span style="color:#FF0000;">该方法主要用来用主线程来修改页面UI的状态。例如跟新tableview

[self performSelectorOnMainThread:@selector(reloadtableview) withObject:nil waitUntilDone:YES];
</span>
程序开发中可以使用performselectorinbackground 来进行数据的获取,在performSelectorOnMainThread中进行UI的修改。

例如使用HUD展示界面 后后面采用performselectorinbackground获取网络数据最后使用performSelectorOnMainThread 显示结果。


例如

 if (HUD!=nil) {
        [HUD release];
    }
    HUD = [[MBProgressHUD alloc] initWithView:self.view];
    [self.view addSubview:HUD];
    
    HUD.delegate = self;
    HUD.labelText = @"正在发送信息...";
    HUD.detailsLabelText = @"请稍候";
    HUD.square = YES;
    [HUD showWhileExecuting:@selector(SendBackProcess) onTarget:self withObject:nil animated:YES];
注意此时在返回主线程是最好将HUD关闭,执行[self hudWasHidden]函数

- (void)hudWasHidden {
    // Remove HUD from screen when the HUD was hidded
    [HUD removeFromSuperview];
    [HUD release];
    HUD=nil;
    
}



-(void)SendBackProcess ///点赞
{
    
    NSString *httpurl=[NSString stringWithFormat:@"%@/praisetopic",CMMUNITYURL];
    
    int ret= [self SendActionData:httpurl];
    if (ret!=0) {
        
        [self hudWasHidden];
        [self performSelectorOnMainThread:@selector(reloadtableview) withObject:nil waitUntilDone:YES];
       // [DataTableView reloadData];
    }
    else
    {
      //  [self  LoadData];
    
        [self hudWasHidden];
        [self showAlert:@"网络错误。"];
    }
  
   //  [self performSelectorOnMainThread:@selector(reloadtableview) withObject:nil waitUntilDone:YES];
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值