объективный класс констант c

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

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

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

i.e.

myclass.theConstant

любая помощь была бы очень признательна.


person C.Johns    schedule 22.04.2012    source источник
comment
Манджунат опубликовал отличный ответ здесь: stackoverflow.com/a/2377432/1218605   -  person C4 - Travis    schedule 23.04.2012


Ответы (2)


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

.h
extern NSString * const MYObjectDidSomethingNotification;

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

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

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

person Rob Napier    schedule 22.04.2012
comment
ладно круто, спасибо за ответ. почему #define плохо? просто из любопытства. - person C.Johns; 23.04.2012
comment
Мне также интересно, почему определения плохи для констант. Это из-за отсутствия безопасности типов? - person borrrden; 23.04.2012
comment
Обзор. Безопасность типа. Можно оценить в отладчике. Лучшее сокрытие информации. Изменение константы не требует перекомпиляции всей программы. Избегает головокружительных проблем компиляции, когда определения случайно переопределяются. Есть исключения, когда #define требуется, а в некоторых случаях предпочтительнее. Но по умолчанию вы должны писать свой код на Objective-C, а не на языке макросов препроцессора. Опять же, взгляните на Apple SDK, и вы заметите заметное отсутствие #define, за исключением очень специфических случаев (например, NSAssert). - person Rob Napier; 23.04.2012

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

person Hot Licks    schedule 22.04.2012