我是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)
这是好方法还是下地狱?以及如何正确地做到这一点......
由于
答案 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
而不是类,例如NSPoint
和NSRect
。
如果您具有指向动态分配内存的指针的属性,则需要注意分配,初始化和释放。在这些情况下,Objective-C类会更方便。
另一种方法是使用Objective-C ++并使其成为C ++类/结构。例如,
struct Vector3 {
float X;
float Y;
float Length() { return X + Y; }
};