为什么(id)发件人而不是(UIButton*)发件人

Tim*_*ink 3 objective-c ios4

我正在尝试了解用于iPhone开发的Objective-C,并且在浏览有关操作的示例时,我经常看到以下内容:

- (IBAction)sliderMoved:(id)sender
{
    UISlider *aSlider = (UISlider *)sender;
    //rest of code goes here...
}
Run Code Online (Sandbox Code Playgroud)

接受类型(id)然后立即将其转换为(UISlider*)的目的是什么.为什么不拥有以下内容:

- (IBAction)sliderMoved:(UISlider *)aSlider;
{
    //rest of code goes here...
}
Run Code Online (Sandbox Code Playgroud)

是否存在技术原因,或者仅仅是约定,还是为了可读性而做?

提前致谢,

  • 蒂莫

Mat*_*ing 6

我认为这是一个惯例,因为UIControl并不总是以1:1的方式映射到IBAction.例如,您可以将UISwitch,UIButton和UITextField都映射到- (IBAction)syncUI:(id)sender;方法.在这种情况下,无法指定类型.

我承认这只是我自己的心理理由,如果可以的话,肯定没有什么能阻止你在发送者类型中更明确.我通常是.