Подтвердить что ты не робот

Как объявить мой собственный CGRectZero как постоянный?

Это вопрос новичков C/ Objective-C: -)

Скажем, я хочу CGRectOne и константы CGRectTwo.

Как я могу объявить это?

Спасибо, Жереми

4b9b3361

Ответ 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 просто сделает его глобальной переменной.

Ответ 2

Есть несколько вариантов. С помощью 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 }
};

Ответ 3

Что-то вроде этого

static CGRect CGRectOne = (CGRect){.origin.x = 1.0f, .origin.y = 1.0f, .size.width = 1.0f, .size.height = 1.0f};

Ответ 4

Используемая здесь техника хорошо работала для меня: http://www.cocos2d-iphone.org/forum/topic/2612#post-16402

По существу, это метод extern, описанный Justin, но он дает довольно полный пример.

Кроме того, этот ответ на StackOverflow также является хорошим примером: Константы в Objective-C