(id) и (NSSomeObject *) в Objective-C / Какао? - PullRequest
2 голосов
/ 25 апреля 2009

Лучше ли по возможности использовать id или NSSomeObject *? Я знаю, что компилятор может лучше выполнять проверку, когда он явный, но мне просто интересно, какая из них лучше.

например:.

- (IBAction)someButton:(id)sender

против

- (IBAction)someButton:(NSButton *)sender.

Есть ли какие-либо преимущества для любого из них?

Ответы [ 4 ]

1 голос
/ 26 апреля 2009

Лучше всего использовать наиболее явный тип, возможный именно для того, чтобы компилятор помог вам уловить самые основные ошибки. Однако безопасность, которую вы получаете, действительно минимальна. Гораздо важнее, чтобы у вас были адекватные модульные тесты для обнаружения ошибок более высокого уровня, которые заставили бы вас передать неожиданный тип экземпляра методу.

1 голос
/ 25 апреля 2009

Мне нравится использовать определенные классы.

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

Кроме того, свойства из Objective-C 2.0 не работают с типом id.


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

1 голос
/ 25 апреля 2009

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

Явная типизация (= точный тип вашего объекта) - ваш друг. Когда компилятор сможет лучше проверять, он поймает больше ошибок для вас. Только когда вы слишком ограничены явной типизацией, используйте тип id (= тип утки ).

1 голос
/ 25 апреля 2009

Если вы используете - (IBAction)someButton:(id)sender, у вас может быть NSNotification или другое событие, вызывающее это как селектор. Принимая во внимание, что во втором случае только NSButton * сможет использовать этот метод.

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

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