1. 程式人生 > >@selector的函式如何傳引數/如何傳遞多個引數

@selector的函式如何傳引數/如何傳遞多個引數

不同的類會有不同的傳遞方式,引數名也不盡相同。如果是傳單個引數的就不用集合,如果是傳多個引數可以用類似nsarray,nsdictionary之類的集合傳遞。看下面例子:

例子1:

通過NSTimer看IPhone對@selector的函式如何傳引數,

複製程式碼
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];  

    if(oldView != nil)

    {

        [dict setObject:oldView forKey:@"oldView"]; 

    }

    
if(newView != nil) { [dict setObject:newView forKey:@"newView"]; } [NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(onTimer:) userInfo:dict repeats:NO]; [dict release]; - (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; } }
複製程式碼

 

 

從上可以看出,NSTimer在對@selector(onTimer:)傳遞引數時,將傳參的物件儲存在了NSTimer的userInfo的字典裡,在- (void)onTimer:(NSTimer *)timer中

通過取出該字典加以使用。

例子2:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 -( void )addNotifications:(NSArray*)data{        if  (data==nil||data.count!=2) {          return ;      }      //nsstring字串轉nsinteger      NSInteger notifyNum=[(NSString*)data[0] intValue];      NSInteger index=[data[1] intValue];        MyNBTabButton *button=_buttonData[index];      [button.light addNotifications:notifyNum];         }<br><br> //呼叫

-(void)addNotificationAfterTime

{

     [NSThread sleepForTimeInterval:20];//休眠多少秒之後

        [self performSelectorOnMainThread:@selector(addNotifications:) withObject:[NSArray arrayWithObjects:@"1",@"2"nilwaitUntilDone:NO];

        [NSThread sleepForTimeInterval:1.0];

    

}

  

這個其實也就是iphone對@selector物件傳參的通用的形式。

轉載請註明:http://www.cnblogs.com/langtianya/p/4199409.html