Структура Objective-C и Vector3 - PullRequest
       8

Структура Objective-C и Vector3

0 голосов
/ 07 января 2011

Я довольно новичок в Objective-C (до сих пор я работал с .NET и в основном с ANSI C).

Итак, меня интересует следующее: В .NET у меня есть:

struct Vector { float X, float Y ... float Length() .. }

Но как это сделать в Objective-C?

Использование классов для представления в Vector3 действительно глупо из-за большого количества классов.

У меня есть идея только сделать struct в C-стиле, а затем статический класс со статическими методами, такими как Length(struct Vector3 * vec)

Это хороший путь или путь в ад? И как это сделать правильно ...

Спасибо

1 Ответ

2 голосов
/ 07 января 2011

В общем, если у вас нет реальной, реальной проблемы с производительностью и / или использованием памяти, определите класс Objective-C. Наличие класса Objective-C позволит вам легко использовать его в коллекциях Objective-C, списках свойств, управлении памятью с помощью пулов автоматического выпуска и самоанализе.

При этом, если у вас очень простой набор атрибутов и функций, и / или производительность / память являются загрузочными узлами, не стесняйтесь использовать структуры и глобальные функции. Они маленькие и дешевые. Фреймворки Apple используют их - например, NSSize/CGSize - это простая структура, которая содержит два атрибута, ширину и высоту, и есть несколько функций, которые работают с ними:

// structs and typedefs
struct CGSize {
    CGFloat width;
    CGFloat height;
};
typedef struct CGSize CGSize;
typedef CGSize NSSize;

// functions
NSSize NSMakeSize(CGFloat w, CGFloat h);
BOOL NSEqualSizes(NSSize aSize, NSSize bSize);
NSString *NSStringFromSize(NSSize aSize);
…

В средах Apple существуют другие случаи, когда вместо классов используются struct, например, NSPoint и NSRect.

Если у вас есть атрибуты, которые являются указателями на динамически выделяемую память, вам нужно быть осторожным с выделением, инициализацией и освобождением. В этих случаях класс Objective-C будет более удобным.

Альтернативой является использование Objective-C ++ и превращение его в класс / структуру C ++. Например,

struct Vector3 {
    float X;
    float Y;
    float Length() { return X + Y; }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...