ios开发--SEL(选择器)
1、SEL分为“两类”
====在控件里面使用======
如计时器
[NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(onTimer:) userInfo:dict repeats:NO];
选择器--方法
@selector(onTimer:)
参数userInfo:dict (这里可以把数据封装)
是否重复repeats: NO
2、====直接通过self跳用====
1.=====不传参数
[self performSelector:@selector(click)];
-(void)click{
NSLog(@"没有参数");
}
3、2.=====传1个参数
NSString *str1 = @"111";
[self performSelector:@selector(click:) withObject:str1];
-(void)click:(NSString *)str1{
NSLog(@"%@",str1); //打印出 111
}
4、3.====传2个参数
NSString *str1 = @"111";
NSString *str2 = @"222";
[self performSelector:@selector(click:andStr:) withObject:str1 withObject:str2];
-(void)click:(NSString *)str1 andStr:(NSString *)str2{
NSLog(@"%@",str1);
NSLog(@"%@",str2);
}
5、4.======延迟子线程(主线程不受影响) 传1个参数
NSString *str1 = @"111";
[self performSelector:@selector(click:) withObject:str1 afterDelay:10];
NSLog(@"-------------------");
//===========
-(void)click:(NSString *)str1{
NSLog(@"%@",str1);
}
先打印 -----------
延迟10秒后打印 111
6、======performSelectorOnMainThread 传参数
// YES 表示不等主线程 NO 要等主线程完成后 才执行
NSString *str1 = @"111";
[self performSelectorOnMainThread:@selector(click:) withObject:str1 waitUntilDone:YES];
[NSThread sleepForTimeInterval:10]; //主线程休眠多少秒之后
//==============
-(void)click:(NSString *)str1{
NSLog(@"%@",str1);
}
// 如果设为YES 就直接打印 111
//如果设为NO 等待主线程 10秒后才打印 111
7、======performSelectorInBackground 传参数
//不在主线程之行
[self performSelectorInBackground:@selector(click:) withObject:str1];
[NSThread sleepForTimeInterval:10];
NSLog(@"-------------------");
//===========
-(void)click:(NSString *)str1{
NSLog(@"%@",str1);
}
// 直接打印 “111” 间隔10秒后打印“------” 主线程延迟 没有影响打印