Objective-C和Vector3结构
我对Objective-C非常陌生(到目前为止,我使用的是.NET,主要是ANSI C) 因此,我参加了以下活动: 在.NET中,我有: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) 这是一条好路,还是通往地狱的路?以及如何
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; }
};