Objective-C和Vector3结构

Objective-C和Vector3结构,objective-c,struct,Objective C,Struct,我对Objective-C非常陌生(到目前为止,我使用的是.NET,主要是ANSI C) 因此,我参加了以下活动: 在.NET中,我有: struct Vector { float X, float Y ... float Length() .. } 但如何在Objective-C中做到这一点 使用类表示Vector3实在是太愚蠢了,因为类太多了 我只想到用C方式构造结构,然后用静态方法创建静态类,比如Length(structvector3*vec) 这是一条好路,还是通往地狱的路?以及如何

我对Objective-C非常陌生(到目前为止,我使用的是.NET,主要是ANSI C)

因此,我参加了以下活动: 在.NET中,我有:

struct Vector { float X, float Y ... float Length() .. }
但如何在Objective-C中做到这一点

使用类表示Vector3实在是太愚蠢了,因为类太多了

我只想到用C方式构造结构,然后用静态方法创建静态类,比如
Length(structvector3*vec)

这是一条好路,还是通往地狱的路?以及如何以正确的方式做这件事


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

也就是说,如果您有一组非常简单的属性和函数,并且/或者性能/内存都是bootleneck,那么可以随意使用结构和全局函数。它们又小又便宜。苹果的框架利用了它们——例如,
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);
…
在苹果的框架中还存在使用
struct
s代替类的其他情况,例如
NSPoint
NSRect

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

另一种方法是使用ObjtoVC++并将其作为C++类/结构。比如说,

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