ios开发--SEL(选择器)

2025-11-22 13:21:26

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秒后打印“------”    主线程延迟 没有影响打印

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢