iOS基础之NSTimer 以及通知传递参数

前言

这篇文章记录了如何使用NSTimer以及通知来给执行的方法传递参数

正文

定时器传参

使用下面一行代码来在指定时间内是否周期性执行指定的方法

[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(onTimer:) userInfo:dict repeats:NO]; 

可以看到onTimer后面有一个冒号,表示这个方法后面有一个参数。 那么我们如何给这个方法传递参数呢?请看onTimer方法的定义

- (void)onTimer:(NSTimer *)timer 
{  
    UIView *oldView = [[timer userInfo] objectForKey:@"oldView"];
    UIView *newView = [[timer userInfo] objectForKey:@"newView"];  
    [UIView animateWithDuration:2.0  delay:0
                        options:UIViewAnimationOptionAllowUserInteraction
                     animations:^{  
                         oldView.alpha = 0.0; 
                         newView.alpha = 1.0;  
                     }  
} 

注意一下这里的onTimer后面的参数,它是通过NSTimer这个类型的参数实例使用[timer userInfo]获取上面在[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(onTimer:) userInfo:dict repeats:NO];
中的userInfo指定的字典变量

important note: 使用[timer userInfo]来获取在userInfo中指定传递的参数时,一定要保证这个NSTimer(也就是上面代码通过[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(onTimer:) userInfo:dict repeats:NO];产生的定时器变量) 没有使用[self.searchTimer invalidate]; self.searchTimer = nil;来让定时器失效,否则的话会出现EXC_BAD_ACCESS错误

通知传参

定义有参数 的通知

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(specifyModelInfoPrinting:) name:@"specifyModelInfoPrinting" object:nil];

specifyModelInfoPrinting方法带一个NSNotification参数

- (void)specifyModelInfoPrinting:(NSNotification *)notice {
    self.nonLabel.hidden = YES;
    self.printProgressView.hidden = NO;
    self.printingDictInfomation = [notice userInfo];
}

使用NSNotification类型实例变量通过代码[notice userInfo]获取下面在userInfo指定的参数变量

[[NSNotificationCenter defaultCenter]postNotificationName:@"specifyModelInfoPrinting" object:nil userInfo:stlDict];

这里给userInfo指定的是一个字典,因此使用[notice userInfo]获取到的就是一个字典变量

performSelector传参

-(void) showMessageToUI:(NSString*) message {
    MBProgressHUD *progress = [MBProgressHUD showHUDAddedTo:self animated:NO];
    progress.labelText = message;
    [self performSelector:@selector(hideHUD:) withObject:progress afterDelay:1];
}
-(void) hideHUD:(MBProgressHUD*) progress {
    __block MBProgressHUD* progressC = progress;
    dispatch_async(dispatch_get_main_queue(), ^{
        [progressC hide:YES];
        progressC = nil;
    });
}

从上面的代码可以知道,withObject后面跟上什么类型的变量,那么在对应执行方法后面就赋予什么类型的参数,⚠️:这里参数只能有一个,如果想要传递多个参数,那么存放到字典或者数组然后再传递

参考资料

通过NSTimer看IPhone对@selector的函数如何传参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值