@performselector 参数怎么知道我想传什么参数

不同的类会有不同的传递方式,参数名也不尽相同。如果是传单个参数的就不用集合,如果是传多个参数可以用类似nsarray,nsdictionary之类的集合传递。看下面例子:
通过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
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
oldView.alpha = 0.0;
newView.alpha = 1.0;
从上可以看出,NSTimer在对@selector(onTimer:)传递参数时,将传参的对象储存在了NSTimer的userInfo的字典里,在- (void)onTimer:(NSTimer *)timer中
通过取出该字典加以使用。
-(void)addNotifications:(NSArray*)data{
if (data==nil||data.count!=2) {
//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对象传参的通用的形式。
转载请注明:/langtianya/p/4199409.html
阅读(...) 评论()IOS开发】@selector&调用方法,传递多参数。。
1、首先,@selector 里面的方法不能传参数。。不要相信网上的。。都是复制粘贴的。
2、分三步走:1.设置tag。2.设置btn的调用方法。3.使用参数
2、看示例代码把。。
&&&UIButton * markButton=[[UIButton alloc] initWithFrame:CGRectMake(280, 0, 30, 30)];
&&&&markButton.tag=@&参数值&; //这里是你要传递的参数值
&&&&[markButton addTarget:self action:@selector(addMark:)&&forControlEvents:UIControlEventTouchUpInside];
addMark函数做处理。
-(BOOL) addMark:(UIButton *)btn{
&&&&NSLog(@&%@&,btn.tag];
******************************************************
针对有人提问:btn.tag多参数的时候可以处理成一个json串或者字典的形式
******************************************************
现在看来!上面的做法是挺不合理的。。
1、正确的做法可以将需要传递的参数放入到一个数组/字段里面。
2、通过button的tag值也好,去找数组/字典对应的值
例如:button的tag值为101 &&那么可以在字典里面存入一个值dic的 [&101&:&这里是值&]
当点击button按钮的时候通过btn.tag可以获取到dic 的key,就可以得到值了。。。。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2452次
排名:千里之外
原创:56篇
转载:10篇
(1)(10)(2)(6)(33)(13)(1)IOS深入学习(17)之选择器(Selector) - 推酷
IOS深入学习(17)之选择器(Selector)
& & 本文是一篇关于选择器(Selector)的文章,Selector可以理解为一个方法名,具体见下文。
& & 英文原文:
& & 转载请注明出处:
& & Selector是一个对象中用来选择方法来执行的名字,或者是当源代码编译时候用来替换名字的唯一的标示。Selector自己并不能做任何事情。它简单的标示了一个方法。使得selector方法名称不同于普通字符串的唯一的事情是编译器确定selectors是独特的。使得selector有用的是(与运行时结合)它扮演着类似于一个动态函数指针,对于一个已经给与的名字,自动指向类所使用的适用的方法的实现。假设我们有一个run方法的selector,并且类Dog,Athlete和ComputerSimulation(每个类都实现了run方法)。Selector能够被每一个类的实例所使用并且调用它的run方法--设置方法的实现可能是互不相同的。
2.1 如何获得Selector
& & 被编译的selectors是SEL类型的。有两种方式获得selector:
&在编译期,我们使用编译标示@selector
SEL aSelector = @selector(methodName);
&在运行时,我们使用NSSelectorFromString方法,字符串是方法名:
SEL aSelector = NSSelectorFromString(@&methodName&);
&当我们想要我们的代码发送一个知道运行时我们才知道名字的消息的时候,我们使用selector创建一个字符串。
2.2 如何使用Selector
& & 我们能够调用以selector为参数的performSelector:的方法并且其他类似的方法来使用:
SEL aSelector = @selector(run);
[aDog performSelector:aSelector];
[anAthlete performSelector:aSelector];
[aComputerSimulation performSelector:aSelector];
(我们使用这个技术在特殊的情况下,例如我们实现了一个使用target-action设计模式的对象。通常,我们直接的简单的调用该方法。)
& & 以上是所有内容,希望对大家有所帮助。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致关于performSelector,怎么带参数_百度知道
关于performSelector,怎么带参数
我有更好的答案
这与你要perform的selector有关系,也可是是nilLZ理解错了吧,anObject与返回值没有关系,不能是一个简单值, 是一个可带可不带的参数,anObject必须符合你所带的参数类型,这个必须是NSObject的对象。而且selector的返回值必须是void吧,如果selector是需要带参数类型的
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 ios selector 参数 的文章

 

随机推荐