IOS按钮按下事件?

时间:2013-05-19 10:08:59

标签: iphone ios xcode

我想知道它之间有什么区别:

- (IBAction)operationPressed:(UIButton *)sender {

}

和:

- (IBAction)operationPressed:(id)sender {


}

我可以看到xcode在使用id时尝试为自动完成提供更多额外的帮助。 那么哪一个是 正确的 才能使用?为什么?

感谢

3 个答案:

答案 0 :(得分:3)

从技术上讲,它无关紧要:UIButton*的声明类型不保证不可能使用其他类型的对象进行调用。最合适的样式允许您使用“点语法”访问UIButton的属性,而第二种样式允许您重用其他UI对象的处理程序,而不会让读者想知道发生了什么。

例如,如果您知道事件处理程序仅用于按钮,则可以将发件人类型声明为UIButton,然后执行以下操作:

- (IBAction)operationPressed:(UIButton *)sender {
    sender.adjustsImageWhenHighlighted = YES;
}

使用第二个声明你必须写下这个:

- (IBAction)operationPressed:(id)sender {
    [sender setAdjustsImageWhenHighlighted:YES];
}

另一方面,如果您计划为不同的UI对象重用处理程序,那么第二种方法更可取。

答案 1 :(得分:1)

id是一种数据类型,它将保存所有其他数据类型,如果您想要存储您不知道运行时类型的内容,这将非常有用。

如果您确实知道类型(如此类型),最好在id上使用该类型,因为它使用较少的字节来存储它。

答案 2 :(得分:1)

当您使用特定类(即UIButton)实现此方法时,Xcode将为您提供更多帮助。例如,它会自动填充更多内容,如果您向无法理解的按钮发送消息,则会给您错误。如果编译器只知道发件人属于id类型,那么它将无法帮助您。

另一方面,如果您有几个按钮,其中一些是UIControl的子类,而不是UIButton的子类,并且您都希望它们触发operationPressed,那么您可能希望将发件人设置为UIControlid

所以基本上,如果你知道发送者的类型是什么,如果告诉Xcode发送者的类型是什么,生活会更容易。如果您不知道,请使用id