在类方法方法中,我声明如下:
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Hello"
message:@"World"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Done", nil];
现在即使contains方法是类方法,编译器也不会抱怨delegate:self
。现在成为委托我必须在UIAlertViewDelegate
协议中实现该方法。
现在是否重要,如果该方法是否为类方法,以便在用户与我的AlertView交互时调用?
我问这个问题,因为我的类没有任何实例变量所以我更喜欢它只包含类方法。
答案 0 :(得分:14)
我想分享一些我的发现:
我是否声明代理人delegate:self
或delegate:[MyClass class]
但是,我如何声明方法并不重要:
此作品
+(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)
是的,你可以!一个类也是一个对象。