Могу ли я использовать метод класса в качестве обратного вызова делегата - PullRequest
12 голосов
/ 16 января 2012

В методе метода класса я объявляю следующее:

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

Теперь, даже если содержащий метод является методом класса, компилятор не жалуется на delegate:self.Теперь, чтобы быть делегатом, я должен реализовать метод в протоколе * 1005.

1007 * Имеет ли значение сейчас, является ли метод методом класса или нет, чтобы вызываться, когда пользователь взаимодействует с моим AlertView?

Я задаю этот вопрос, потому что в моем классе нет переменных экземпляра, поэтому я бы предпочел, чтобы он содержал только методы класса.

Ответы [ 3 ]

14 голосов
/ 16 января 2012

Я хотел бы поделиться некоторыми из моих выводов:

  1. Не имеет значения, объявляю ли я такого делегата delegate:self или delegate:[MyClass class]

  2. Однако не имеет значения, как я объявляю метод:

    Это работает

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

    Хотя следующий "синтаксис" является объявлением вUIAlertViewDelegate протокол, он не работает :

    -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
        // Some Actions here
    }
    
11 голосов
/ 16 января 2012

Во-первых, я предполагаю, что под "статическими" методами вы подразумеваете методы класса (объявленные с + вместо -).

«Компилятор не жалуется» на Objective-C не всегда говорит вам много. Все это действительно означает, что вы убедили компилятор, что все должно (или, по крайней мере, может ) работать во время выполнения.

В конце концов, если объект, который вы предоставляете в качестве делегата, отвечает на правильные сообщения, компилятору не нужно заботиться о том, что это класс (и не будет и среда выполнения). В этом случае вы предоставляете self из метода класса. Это как если бы вы набрали [MyClass class].

Я думаю, возможно, сомнительно, что именно это следует сделать, но это, вероятно, выходит за пределы вашего вопроса.

1 голос
/ 16 января 2012

Да, вы можете !!!Класс также является объектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...