Это вопрос новичков C/ Objective-C: -)
Скажем, я хочу CGRectOne и константы CGRectTwo.
Как я могу объявить это?
Спасибо, Жереми
Это вопрос новичков C/ Objective-C: -)
Скажем, я хочу CGRectOne и константы CGRectTwo.
Как я могу объявить это?
Спасибо, Жереми
Остальные ответы в порядке - в некоторых случаях -.
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
просто сделает его глобальной переменной.
Есть несколько вариантов. С помощью C89,
const CGRect CGRectOne = { { 0.0f, 0.0f }, { 1.0f, 1.0f } };
С C99,
const CGRect CGRectOne = {
.origin.x = 0.0f,
.origin.y = 0.0f,
.size.width = 1.0f,
.size.height = 1.0f
};
или
const CGRect CGRectOne = {
.origin = { .x = 0.0f, .y = 0.0f },
.size = { .width = 1.0f, .height = 1.0f }
};
Что-то вроде этого
static CGRect CGRectOne = (CGRect){.origin.x = 1.0f, .origin.y = 1.0f, .size.width = 1.0f, .size.height = 1.0f};
Используемая здесь техника хорошо работала для меня: http://www.cocos2d-iphone.org/forum/topic/2612#post-16402
По существу, это метод extern, описанный Justin, но он дает довольно полный пример.
Кроме того, этот ответ на StackOverflow также является хорошим примером: Константы в Objective-C