В общем, если у вас нет реальной, реальной проблемы с производительностью и / или использованием памяти, определите класс 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; }
};