Другие ответы в порядке - в некоторых случаях -.
A) если его объявить, static
выдаст копию за перевод. Это хорошо, если он виден только одному переводу (то есть его определение находится в вашем файле .m / .c). В противном случае вы получите копии в каждом переводе, который включает / импортирует заголовок со статическим определением. Это может привести к раздутому двоичному файлу, а также к увеличению времени сборки.
B) const CGRect CGRectOne = {...};
испустит символ в объявленной области. если это заголовок, видимый для нескольких переводов, вы получите ошибку ссылки (потому что CGRectOne
определяется несколько раз - например, один раз для файла .c / .m, который прямо или косвенно включает заголовок, в котором определена константа).
Теперь, когда вы знаете контекст для использования этих двух объявлений, давайте рассмотрим способ 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
, это будет глобальная переменная.