performSelector的简单用法
来源:互联网 发布:苹果电脑剪辑软件 编辑:程序博客网 时间:2024/05/16 10:29
- (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:imageViewafterDelay: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:labelrepeats:YES];
[self.viewaddSubview:label];
}
到这里还需要注意的是:
(1)如果调用的selector不接受参数则,withObject:nil
(2) 通过performSelector:withObjcet:afterDelay调用的方法不能有返回值
- (void)mainMethod
{
[selfperformSelectorOnMainThread:@selector(delayMethod)withObject:nilwaitUntilDone: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);
}
- performSelector的简单用法
- performSelector的原理以及用法
- performSelector的原理以及用法
- performSelector的原理以及用法
- performSelector用法
- performSelector用法:
- Swift中performSelector返回值的用法
- performSelector用法介绍
- performSelector用法和cancelPreviousPerformRequestsWithTarget用法
- performSelector: withObject传递参数用法
- performSelector引发的感想
- 关于performSelector的执行
- performSelector
- performSelector
- performSelector
- PerformSelector
- performSelector
- 取消performSelector操作的方法
- codeforces 277 A Learning Languages
- Neo4j使用shell脚本执行命令
- Codeforces Round #361 (Div. 2)——B. Mike and Shortcuts(BFS+小坑)
- Spring Filter过滤器,Spring拦截未登录用户权限限制(转)
- Mybatis缓存粗显理解
- performSelector的简单用法
- 【TCP/IP协议】java SOCKET网络编程
- 艺术品交易平台需求设计文档
- CamShift 目标跟踪算法研究(转)
- 三消中检测相同颜色,和开始时随机换掉相同图片
- POIFSFileSystem java.io.IOException: Read error
- 阿里巴巴的开源技术
- ORA-28000: the account is locked-的解决办法
- MySQL 学习笔记