Значение (AppDelegate *) - PullRequest
       3

Значение (AppDelegate *)

1 голос
/ 24 октября 2011

Может кто-нибудь объяснить, что означает (AppDelegate *) в следующем фрагменте?

(AppDelegate *)[[UIApplication sharedApplication] delegate] iPad]

Ответы [ 4 ]

4 голосов
/ 24 октября 2011

[[UIApplication sharedApplication] delegate] возвращает id.Таким образом, вы не можете получить доступ, например, к window свойству этого свойства (потому что объект id его не имеет).

(AppDelegate *) оператор приводит к «конвертации» id в AppDelegate объект, поэтому выможет получить доступ к его компонентам.

Это как иметь NSObject *obj1; и NSString *obj2; - вы не можете сделать -substringToIndex: с obj1 ...

3 голосов
/ 24 октября 2011

Этот код преобразует возвращаемое значение [[UIApplication sharedApplication] delegate] в тип AppDelegate *.

Это не является строго необходимым, но оно предотвратит предупреждения компилятора при вызове метода iPad в классе, который может не поддерживать этот вызов метода. Предполагая, конечно, что AppDelegate имеет метод с именем iPad.

2 голосов
/ 24 октября 2011

Метод делегата возвращает идентификатор (неклассифицированный объект), поэтому компилятор не имеет информации о возвращенном объекте и, в частности, не знает, есть ли у него метод iPad.Это нормально, но оставляет неопределенные вещи (динамическая типизация).Явно возвращая возвращаемый объект в класс AppDelegate, вы сообщаете компилятору, что вы знаете, что возвращенный объект делегата является экземпляром AppDelegate.Это позволяет компилятору проверить, что у вашего класса AppDelegate есть метод iPad (статическая типизация).Это хорошо, потому что теперь компилятор может выполнять более точную проверку ошибок.Однако компилятор просто верит вашему исполнению, так что не врите!Если вы лжете и отправляете сообщение iPad объекту, у которого нет метода iPad, ваше приложение может аварийно завершить работу во время выполнения.

0 голосов
/ 24 октября 2011

Это просто класс, используемый для приведения делегата к AppDelegate

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