Синтаксис Objective-C и предупреждение о компиляции - PullRequest
0 голосов
/ 07 января 2010

, когда я компилирую свой проект приложения через XCode, я получил слишком много предупреждений, большинство говорят: «myClass» может не отвечать на «+ isAliveNetworkConnection:», хотя метод «isAliveNetworkConnection» был реализован в файле .m, но он делает не объявить в файле .h, я считаю, что это работает, поэтому я не люблю переписывать в головном файле снова;

Я думаю, что Objective-C не убедителен в использовании, чем Java ... может быть, я слишком ленив? : D

у кого-нибудь есть такая же мысль?

Ответы [ 4 ]

3 голосов
/ 07 января 2010

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

Как вы обнаружили, вы "можете" пропустить объявление методов в вашем .h файле, но это не рекомендуется. Зачем? Во-первых, если кто-то еще читает ваш код, может быть проще получить быстрый список всех реализованных методов. Во-вторых, если вы отлаживаете свой код и получаете сбой, скажем, objc_msgsend, когда объекту отправляется сообщение, на которое он не отвечает, вы можете легко отследить проблему, поскольку она возникнет как предупреждение в вашем код. Если вы всегда избегаете именования функций в своем файле .h, у вас будут сотни (тысячи?) Предупреждений, и будет непросто просмотреть их все.

Короче говоря, вы можете многим сойти с рук, но в целом вы должны следовать "хорошим" методам кодирования.

0 голосов
/ 07 января 2010

Заголовочный файл является официальным API для вашего класса. Если вы не укажете что-то там, компилятор предположит, что другой код, использующий этот селектор, использует некоторую внутреннюю функциональность.

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

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

0 голосов
/ 07 января 2010

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

Вы можете реализовать частные методы, которые вам не нужны, в заголовке, используя категорию, например так:

in YourClass.m :

@interface YourClass (Private)
- (void)yourPrivateMethod;
@end

@implementation YourClass

- (void)yourPrivateMethod
{
    //do stuff
}
@end
0 голосов
/ 07 января 2010

C и Java разные. Вы должны сообщить компилятору, какие методы ваш класс реализует в интерфейсе, иначе он не может знать, поэтому вы получаете предупреждения.

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