performSelector:withObject:,但不包含对象

时间:2010-12-05 20:44:46

标签: iphone objective-c

我想做performSelector:withObject:但是对象是CGFloat。所以它实际上不是一个对象。我怎么能这样做?

我正在执行选择器的对象不是我的,我无法修改它。

例如

[xyz performSelector:@selector(setOffset:) withObject:2];

(发布后我稍微改变了我需要的内容:

[xyz performSelector:@selector(setOffset:) withObject:CGSizeMake(2,0)];

5 个答案:

答案 0 :(得分:3)

如果您尝试针对您无法控制的对象调用任意选择器,您可以使用NSInvocation来设置选择器,目标和参数,并在获取返回值之后方法已经执行。

但一般来说,有更简单的解决方案。

答案 1 :(得分:0)

您需要一个消息对象。当我需要做这样的事情时,我将创建一个简单的容器类,将数据推送到实例中,然后在需要时执行选择器(通常是@selector(doIt :))。

如果您可以定位4.x,则通常也可以使用块。

(如果不了解更多关于你想要做什么的事情,很难得到更具体的信息。)

答案 2 :(得分:0)

  

传递的对象是CGFloat。所以它实际上不是一个对象。

正如您之后写的那样,如果您传递了一个对象,则它不能是CGFloat,因为CGFloat是一个typedef'ed原语({{1} }或float)。

如果您已将数字值作为对象传递,则可能会以某种方式传递double

对你的问题没有背景,没有办法确定。

答案 3 :(得分:0)

尝试使用IMP(指向方法实现开始的指针。)

SEL setOffsetSEL = @selector(setOffset:);
IMP setOffsetIMP = [XYZClass instanceMethodForSelector:setOffsetSEL];
setOffsetIMP(xyz, setOffsetSEL, 2);

答案 4 :(得分:-2)

您可以使用:

[NSNumber numberWithFloat:(float)value]