performSelector的简单用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Number_One_2015/article/details/51858332

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;

这个方法是单线程的,也就是说只有当前调用次方法的函数执行完毕后,selector方法才会被调用。

也就是(调用别人的代码):

- (void)mainMethod
{   
    [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1];

    NSLog(@"调用方法==开始");
    
    sleep(5);
    
    NSLog(@"调用方法==结束");
}

- (void)delayMethod
{
    NSLog(@"执行延迟方法");
}

执行结果(注意log打印的顺序):

  调用方法==开始
  调用方法==结束
  执行延迟方法


也是有Object的对象的这可以直接使用:

        //在这方法里,UI一般是要放在主线程中运行的。

    [self performSelector:@selector(onImageStopInPer:)withObject:imageView afterDelay:imageView.animationDuration*imageView.animationRepeatCount];



-(void)onImageStopInPer:(UIImageView *)imageView{

    [imageView removeFromSuperview];

    

    UILabel * label = [[UILabelalloc] init];

    label.frame = imageView.frame;

    label.backgroundColor = [UIColorredColor];

    label.text = @"动画已结束!!!";

    label.textColor = [UIColorwhiteColor];

    label.textAlignment =NSTextAlignmentCenter;

    label.font = [UIFontfontWithName:@"Arial-BoldMT"size:29];

    [NSTimerscheduledTimerWithTimeInterval:2target:selfselector:@selector(annotationLabel:)userInfo:label repeats:YES];

    [self.viewaddSubview:label];

}


到这里还需要注意的是:

1)如果调用的selector不接受参数则,withObjectnil 

2 通过performSelector:withObjcet:afterDelay调用的方法不能有返回值


- (void)mainMethod

{


        [self performSelectorOnMainThread:@selector(delayMethod) withObject:nil waitUntilDone:YES];


    NSLog(@"调用方法==开始");

    

    sleep(5);

    

    NSLog(@"调用方法==结束");

}


- (void)delayMethod

{

    NSLog(@"执行延迟方法");

}


执行结果:

2016-07-08 15:41:33.744 GITButtonDemo[841:24412] 执行延迟方法

2016-07-08 15:41:33.745 GITButtonDemo[841:24412] 调用方法==开始

2016-07-08 15:41:38.749 GITButtonDemo[841:24412] 调用方法==结束



还有就是NSTimer也有这样的方法

//imageView.animationDuration*imageView.animationRepeatCount(10*5)之后,就会调用

    [NSTimer scheduledTimerWithTimeInterval:imageView.animationDuration*imageView.animationRepeatCounttarget:selfselector:@selector(onImageStop:)userInfo:imageViewrepeats:NO];



-(void)onImageStop:(NSTimer *)timer{


        UIImageView * imageView = [timer userInfo];


        [imageView removeFromSuperview];


        UILabel * label = [[UILabelalloc]init];

        label.frame = imageView.frame;

        label.backgroundColor = [UIColorredColor];

        label.text = @"动画已结束!!!";

        label.textColor = [UIColorwhiteColor];

        label.textAlignment =NSTextAlignmentCenter;

        label.font = [UIFontfontWithName:@"Arial-BoldMT"size:29];

    [NSTimerscheduledTimerWithTimeInterval:2target:selfselector:@selector(annotationLabel:)userInfo:labelrepeats:YES];

        [self.viewaddSubview:label];

        

}


-(void)annotationLabel:(NSTimer *)timer{


    UILabel * label = [timer userInfo];

    

    label.frame = CGRectMake(40, 300, 300, 50);

 

    


}



猜你喜欢

转载自blog.csdn.net/Number_One_2015/article/details/51858332