Objective-C和Vector3结构

时间:2011-01-07 17:06:38

标签: objective-c struct

我是Objective-C的新手(到目前为止,我正在使用.NET,主要使用ANSI C)。

所以我对以下内容感兴趣: 在.NET中我有:

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

但是如何在Objective-C中设法做到这一点?

使用类进行Vector3表示非常简单,因为有大量的类。

我只有C语言中的Idea do struct,然后是静态类,如Length(struct Vector3 * vec)

这是好方法还是下地狱?以及如何正确地做到这一点......

由于

1 个答案:

答案 0 :(得分:2)

通常,除非您遇到性能和/或内存使用方面的实际问题,否则请定义Objective-C类。拥有Objective-C类将允许您在Objective-C集合,属性列表,通过自动释放池的内存管理和内省中轻松使用它。

话虽这么说,如果你有一组非常简单的属性和/或性能/内存是bootlenecks,请随意使用结构和全局函数。它们小而便宜。 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而不是类,例如NSPointNSRect

如果您具有指向动态分配内存的指针的属性,则需要注意分配,初始化和释放。在这些情况下,Objective-C类会更方便。

另一种方法是使用Objective-C ++并使其成为C ++类/结构。例如,

struct Vector3 {
    float X;
    float Y;
    float Length() { return X + Y; }
};