最近写一个小代码时候发现一个问题:- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *str;
    for (int i = 1; i < 7; i++) {
        str = [NSString stringWithFormat:@"%d",i];
        self.lbl.text = str;                                     // 设置lbl文本 = i
        [NSThread sleepForTimeInterval:0.5];   // 暂停0.5s
    }
}就是拉了一个lable控件,在界面上每隔0.5s,依次显示1 - 6 ,但是仿真结果却是一直停在进入的界面,直到代码执行完,lbl直接显示6.求问大神这是为什么???

解决方案 »

  1.   

    首先不能在 viewDidLoad 中运行,因为这时view还没有显示出来。
    其次不能用  [NSThread sleepForTimeInterval:],它会屏蔽所有的输入,比如按钮的响应。
      

  2.   

    大概是这样:-(void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
        [self showNumber: [NSNumber numberWithInt:1]];
    }-(void)showNumber:(NSNumber *)numInt
    {
        NSInteger intValue = [numInt integerValue];
        if(intValue>6)
        {
            return;
        }
        
        self.label.text = [NSString stringWithFormat:@"%ld", (long)intValue];
        [self performSelector: @selector(showNumber:) withObject:[NSNumber numberWithInt: intValue+1] afterDelay:0.5f];
    }
      

  3.   

    一是界面还没有显示,二是在主线程会卡,所以用后台线程才行,如下示例:
    -(void) shownum:(NSNumber*)num{
        // 显示数值
    }
    -(void) backthread{
        for (int i=0; i<6; i++) {
            [NSThread sleepForTimeInterval:0.5];
            [self performSelectorOnMainThread:@selector(shownum:) withObject:[NSNumber numberWithInt:i] waitUntilDone:NO];
        }
    }
    - (void)viewDidLoad {
        [super viewDidLoad];
        [self performSelectorInBackground:@selector(backthread) withObject:nil];
    }