Ответ 1
Остальные ответы в порядке - в некоторых случаях -.
A), объявив, что static
выдаст копию на перевод. Это прекрасно, если оно видно только одному переводу (т.е. Его определение находится в вашем файле .m/.c). В противном случае вы получаете копии в каждом переводе, который включает/импортирует заголовок со статическим определением. Это может привести к раздутой бинарности, а также к увеличению времени сборки.
B) const CGRect CGRectOne = {...};
будет выдавать символ в объявленном объеме. если это будет заголовок, видимый для нескольких переводов, вы столкнетесь с ошибками ссылок (поскольку CGRectOne
определяется несколько раз - например, один раз на .c/.m файл, который прямо или косвенно включает заголовок, где константа определены).
Теперь, когда вы знаете контекст, чтобы использовать эти 2 объявления внутри, давайте рассмотрим способ extern
. Способ extern
позволяет:
- объявить константу в заголовке
- используйте константу во многих переводах
- при испускании только одного определения константы
Подход extern
идеально подходит для повторного использования константы среди нескольких файлов. Вот пример:
file.h
// the declaration in the header:
extern const CGRect CGRectOne;
file.c/м
// the definition:
#import "File.h"
const CGRect CGRectOne = { { 0.0f, 0.0f }, { 1.0f, 1.0f } };
Примечание. Опущение const
просто сделает его глобальной переменной.