Могу ли я использовать метод класса в качестве обратного вызова делегата
В методе метода класса объявляю следующее:
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Hello"
message:@"World"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Done", nil];
Теперь, хотя метод-метод является методом класса, компилятор не жалуется на delegate:self
. Теперь, чтобы быть делегатом, я должен реализовать метод в протоколе UIAlertViewDelegate
.
Теперь имеет значение, если метод является методом класса или нет, для того, чтобы вызываться, когда пользователь взаимодействует с моим AlertView?
Я задаю этот вопрос, потому что у моего класса нет переменных экземпляра, поэтому я бы предпочел, чтобы он содержал только методы класса.
Ответы
Ответ 1
Во-первых, я предполагаю, что с помощью "статических" методов вы подразумеваете методы класса (объявленные с помощью +
вместо -
).
"Компилятор не жалуется" о Objective-C не всегда много говорит вам. Все это на самом деле означает, что вы убедили компилятор, что все должно (или, по крайней мере, может) работать во время выполнения.
В конце концов, если объект, который вы предоставляете в качестве делегата, отвечает на правильные сообщения, компилятору все равно, что это класс (и не будет время выполнения). В этом случае вы предоставляете self
метод класса. Как будто вы набрали [MyClass class]
.
Я думаю, что это, вероятно, вызывает сомнения в том, что вы должны делать, но это, вероятно, вне пределов вашего вопроса.
Ответ 2
Я хотел бы поделиться некоторыми из моих выводов:
-
Не имеет значения, объявляю ли я делегата следующим образом 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
}
Ответ 3
Да, вы можете!!! Класс также является объектом.