我可以使用类方法作为委托回调

时间:2012-01-16 17:03:42

标签: objective-c ios cocoa-touch

在类方法方法中,我声明如下:

    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Hello" 
                                                   message:@"World"
                                                  delegate:self
                                         cancelButtonTitle:@"Cancel" 
                                         otherButtonTitles:@"Done", nil];

现在即使contains方法是类方法,编译器也不会抱怨delegate:self。现在成为委托我必须在UIAlertViewDelegate协议中实现该方法。

现在是否重要,如果该方法是否为类方法,以便在用户与我的AlertView交互时调用?

我问这个问题,因为我的类没有任何实例变量所以我更喜欢它只包含类方法。

3 个答案:

答案 0 :(得分:14)

我想分享一些我的发现:

  1. 我是否声明代理人delegate:selfdelegate:[MyClass class]

  2. 并不重要
  3. 但是,我如何声明方法并不重要:

    此作品

    +(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
        // Some Actions here
    }
    

    虽然以下“语法”是UIAlertViewDelegate协议中的声明,但不起作用

    -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
        // Some Actions here
    }
    

答案 1 :(得分:11)

首先,我假设“静态”方法,你的意思是类方法(用+而不是-声明)。

“编译器没有抱怨”关于Objective-C并不总是告诉你很多。它真正意味着你已经说服编译器应该(或者至少可以)在运行时工作。

最后,如果您作为委托提供的对象响应正确的消息,编译器将不关心它是一个类(运行时也不会)。在这种情况下,您从类方法中提供self。就好像你键入了[MyClass class]

我认为这可能是你应该做的 - 但这可能超出了你的问题范围。

答案 2 :(得分:1)

是的,你可以!一个类也是一个对象。