0

如果我们在任何委托方法中编写一些代码。会是某种方法重载吗?

    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
    switch (alertView.tag)
    {
    case 1000:
        if (buttonIndex == 0)
        {
            [self revealOneLetter];
        }
        break;
    case 2000:
        if (buttonIndex == 0)
        {
            [self removeSomeLetters];
        }
        break;
    case 5000:
        [self backBtnAction:nil];
        break;
    case 3000:
        if (buttonIndex == 1)
        {
            [self buyBtnAction:nil];
        }
        break;
     }

     }

在上面的代码中,我们在委托方法中调用了一些方法,所以基本上我们正在覆盖委托。这东西的确切名称是什么。

4

4 回答 4

2

您没有覆盖(或覆盖重载,它们都是不同的)任何东西,您正在实现一个委托方法。也就是说,您正在添加一个可以由委托对象调用的方法。效果可能类似于覆盖子类中的方法:在这两种情况下,您都在修改对象的行为,但关系不同。委托模式提供了专门化而没有子类化。例如,在应用商店中四分之三的无数应用程序中,几乎所有应用程序都使用相同的 UIApplication 对象——没有人继承 UIApplication 子类,因为您可以使用应用程序委托对其进行专门化。

于 2013-07-25T07:52:44.470 回答
1

您在这里实现协议的方法(UIAlertViewDelegate 协议)而不是重载(我认为您的意思是覆盖)。

在目标 C 中:

  • 重载:具有相同的方法名称但不同的参数不存在(例如在 Java 中)
  • 覆盖:是重写子类中的方法以适应子上下文中的父行为的操作

你在这里所做的是告诉 UIAlertView 实例在某个事件发生时如何表现(单击按钮)

于 2013-07-25T07:49:28.357 回答
1

你没有覆盖任何东西。您正在实施委托协议。

覆盖意味着在子类中重新实现超类的方法。Fe 所有这些UIViewController方法,例如viewDidLoad,当您创建自己的 viewcontroller 子类并编写方法时viewDidLoad,您正在覆盖.viewDidLoadUIViewController

于 2013-07-25T07:49:39.547 回答
1

这既不是覆盖也不是重载,绝对不是。实际上,您的类(例如 viewController)符合或采用协议(在您的情况下UIAlertViewDelegate)。并且在objective-c中的A协议中是方法声明的列表。如果您的类采用或符合协议,那么您必须在您的类中实现这些方法。如果您遵守协议,则协议中有两种方法需要您实现,而其他方法是可选的,通过名称您可以确定开发人员是否要实现这些方法。

因此,在您的情况下,您各自的类符合/采用了一个协议UIAlertViewDelegate,这就是为什么您要实现以下方法,该方法会通知您按下了哪个按钮UIAlertView

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

于 2013-07-25T08:26:07.100 回答