不同的類會有不同的傳遞方式,參數名也不盡相同。如果是傳單個參數的就不用集合,如果是傳多個參數可以用類似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:
-(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]; }
//調用
-(void)addNotificationAfterTime
{
[NSThread sleepForTimeInterval:20];//休眠多少秒之后
[self performSelectorOnMainThread:@selector(addNotifications:) withObject:[NSArray arrayWithObjects:@"1",@"2", nil] waitUntilDone:NO];
[NSThread sleepForTimeInterval:1.0];
}
這個其實也就是iphone對@selector對象傳參的通用的形式。
轉載請注明:http://www.cnblogs.com/langtianya/p/4199409.html