методы в объективе-с - PullRequest
       4

методы в объективе-с

0 голосов
/ 27 июля 2010

Почему иногда вам нужно поместить сигнатуру метода в файл .h, а иногда нет?

Ответы [ 5 ]

0 голосов
/ 27 июля 2010

Методы, которые вы переопределяете из своего суперкласса, не нужно повторно объявлять в интерфейсе вашего класса.Иногда это хорошая идея, но это не обязательно.

Точно так же вам не нужно объявлять методы, которые вы реализуете из протокола;достаточно просто объявить, что вы соответствуете протоколу.

Вы должны объявить «новые» для вашего класса методы: те, которые не унаследованы от суперкласса или части протокола.Это необходимо для того, чтобы предоставить компилятору необходимую информацию для определения правильных аргументов и возвращаемых типов, что необходимо для правильной работы вашего приложения.

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

0 голосов
/ 27 июля 2010

Поскольку технически объекты не имеют методов в Objective-C, как мы их знаем из других языков, вы вместо этого отправляете сообщения объекту, если на объекте имеется соответствующий метод (сообщение) с такой же сигнатурой, это будет называться.Это означает, что нет реальной необходимости иметь подписи в заголовке, однако рекомендуется иметь их, чтобы компилятор мог предупреждать, если вы пишете неправильную подпись.

0 голосов
/ 27 июля 2010

Всегда полезно поместить подпись ваших открытых методов в файл .h. Вы будете избегать предупреждений компилятора, и вы будете знать, что если вы получите предупреждение, то на то есть веская причина (вы неправильно набрали имя метода, тип параметра и т. Д.).

0 голосов
/ 27 июля 2010

Всегда полезно объявлять методы в @interface перед их использованием (это помогает компилятору, позволяя компилятору помогать вам, перехватывая больше ошибок типов), но файл заголовка должен действительно иметь только открытые методы (методы). Вы хотите, чтобы другие классы знали о). Для закрытых методов, которые используются классом для внутреннего использования, хорошим вариантом является расширение класса в файле .m, т.е.

@interface MyClass () 

-(void) superSecretMethod;

@end
0 голосов
/ 27 июля 2010

Это просто потому, что некоторые люди любят помещать его в шапку.Некоторые люди этого не делают.Вы могли заметить, что в файлах .h есть @interface.Технически вам просто нужно поместить туда сигнатуры методов.Но, поверьте мне, это делает жизнь намного проще, если она находится в заголовочном файле (в основном потому, что она более читаема).

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