2010-12-07 3 views
1

Я разработчик .NET, пришедший на iPhone, я все еще чувствую себя в дороге.Как ключевое слово const отличается от iPhone и .NET?

Я попал в точку, в которой в .NET я обычно использовал именованную константу для удобочитаемости. Я понимаю, что есть ключевое слово const в iPhone dev, но большинство примеров, которые я видел, используют #define в этом экземпляре.

Каковы реальные различия между двумя реализациями? Бонусный вопрос: как и когда они должны/не должны использоваться?

+0

Используйте const, когда можете, #define только тогда, когда вам нужно. – 2010-12-07 17:34:31

ответ

2

Есть ряд других вопросов о том, так что обсудит, как константы объявляются и ведут себя в Objective-C, вы должны смотреть на следующем:

Constants in Objective-C

Objective-C “const” question

Significance of const keyword positioning in variable declarations

Для сравнения и сравнения с C# я хотел бы указать, что const в Obj-C по существу тот же, что и на языке C (Obj-C является supe rset of C фактически). В Obj-C константы объявляются в глобальной области действия и должны быть инициализированы значением, известным во время компиляции. Objective-C не поддерживает константы в качестве членов класса. В C# константы всегда являются членами класса (или структуры) и также должны быть инициализированы с использованием значения, известного во время компиляции. C# #define не позволяет связать значение с определенным символом, а используется для выбора условных путей компиляции (с использованием #if и), что совершенно иная.

Что касается использования #define для объявления констант, я лично стараюсь избегать этого, когда это возможно. Значения, которые являются #defined, просто подставляются в код во время компиляции и могут быть интерпретированы по-разному в разных контекстах. Также возможно ввести конфликты имен, которые могут привести к переопределению значения неожиданно. Мои предложения состоят в том, чтобы использовать const, когда вы можете, и #define только тогда, когда вам нужно.

1

#defines - макросы препроцессора, которые заменяются в конечном коде. Таким образом, они имеют определенное значение и могут быть доступны бесплатно. const, с другой стороны, просто статически выделяет переменную, обрабатываемую компилятором. Таким образом, я бы (или, вернее, я) использовал #define вместо const для большинства задач.
Только константы #defined'd могут использоваться для статусов переключателей, кстати.

+0

Полезная информация, спасибо :) – 2010-12-13 10:16:52

Смежные вопросы