转发发件人到发件人对象类型?

时间:2010-01-21 18:07:43

标签: objective-c cocoa-touch

在下面的代码中,我是否需要将发件人转发给UISlider?我不能真正看到发送者是UISlider对象的原因吗?

-(IBAction)sliderChangeGoat:(id)sender {
    UISlider *slider = sender; // OR UISlider *slider = (UISlider*)sender;
    NSString *newText = [[NSString alloc] initWithFormat:@"%d", (int)[slider value]];
    [sliderLabel_003 setText:newText];

    if((int)[slider value] > 0) [goatLabel setText:@"Goats:"];
    } else [goatLabel setText:@"None:"];

    [newText release];
}

EDIT_001:

这就是我的想法(@chuck),你的意思是?我不确定更改姓名发件人是否是不好的表格?

-(IBAction)sliderChangeGoat:(UISlider*)slider {
}
非常感谢

加里

3 个答案:

答案 0 :(得分:3)

没有区别。 id等同于任何其他对象指针类型。所有使用更具体的类型都允许编译器检查它的属性是什么,并且您正在发送它声明的类响应的对象消息。

如果你想以这种方式静态输入,你可以自己创建参数(UISlider *)slider。参数名称就像任何其他参数名称一样 - 它只是一个变量。我经常在委托方法中将其更改为“未使用”,我不关心发送方只是为了明确表示如果我将其他内容挂钩,它就不会改变。正如我所说,UISlider*id相同,但它会限制您可以发送的消息而不会收到警告。

答案 1 :(得分:1)

显式强制转换可能有助于编译器确认您的意图。如果你看到编译器警告,那么继续演员。

答案 2 :(得分:0)

Objective-C是一种动态语言。在运行时,它将尝试向发送方发送值消息。如果您的发件人是UISlider,它将起作用。就像其他人说的那样,如果你看到警告继续进行并改变方法声明或投射发送者,但即使你不这样做也会有效。