2012-04-22 1 views
6

У меня есть некоторые константы, закодированные в несколько разных классов viewController и NSObject atm. Один из ребят в моей работе сказал, что я должен поместить их в свой класс (т. Е. В класс констант)Объектив c константы класс

Мне интересно, что такое pro и con этого типа дизайна, а также если это что-то, что должно делать какие-либо разъяснения о том, как это сделать, было бы здорово.

например, Я просто создаю новый класс NSObject и имею кучу #defines в нем? то когда мне нужно их использовать, я просто подклассифицирую свой класс констант и использую константы внутри этого класса, как и любой другой метод или переменную из другого класса?

т.е.

myclass.theConstant 

любая помощь будет в значительной степени appreicated.

+1

Manjunath опубликовал отличный ответ здесь: http://stackoverflow.com/a/2377432/1218605 –

ответ

11

Положите константы с вещами, которые их используют. Не создавайте глобальный файл «все константы». Это делает повторное использование кода огромной головной болью. Например, если вы отправляете уведомление, вам нужна строка имени уведомления. Таким образом, вы помещаете это в класс, который отправляет уведомление:

.h 
extern NSString * const MYObjectDidSomethingNotification; 

.m 
NSString * const MYObjectDidSomethingNotification = @"MYObjectDidSomethingNotification"; 

Константы, как правило, не являются методами или не определены. Это просто постоянные глобальные переменные, как показано выше. Вам следует избегать #define везде, где это возможно, но есть некоторые места, которые очень полезны (например, константы UIColor объектов, которые разочаровывают в противном случае).

Проведите немного времени в файлах заголовков Apple, чтобы увидеть примеры. Посмотрите в UIWindow.h, UITableViewCell.h и UITableView.h на пару хороших примеров того, как обычно определяются константы.

+0

хорошо, спасибо за ваш ответ. почему #define плохо? просто из любопытства. –

+0

Я также задаюсь вопросом, почему определения являются плохими для констант. Это из-за отсутствия безопасности типа? – borrrden

+4

Scoping. Тип безопасности. Может быть оценена в отладчике. Лучшая информация скрывается. Изменение константы не требует перекомпиляции всей программы. Избегает проблем с компиляцией разума, когда определения случайно переопределяются. Существуют исключения, в которых требуется #define и в некоторых случаях предпочтительнее. Но по умолчанию вы должны написать свой код в Objective-C, а не на макропроцессоре препроцессора. Опять же, посмотрите на SDK Apple, и вы заметите заметное отсутствие #define, за исключением особых случаев (например, NSAssert). –

0

Если у вас есть только #defines, они не обязательно должны быть в любом классе - просто вставьте их в свой .h-файл.