Objective-C and Vector3 struct
I am pretty new to Objective-C (so far I was working with .NET and mainly with ANSI C).
So I am interssted in following:开发者_如何学编程 In .NET I have:
struct Vector { float X, float Y ... float Length() .. }
But how to manage to do this in Objective-C ?
Using class for Vector3 representation is really dumm, because of huge amount of classes.
I only have Idea do struct in C way and then static class with static methods like Length(struct Vector3 * vec)
Is this good way, or way to hell ? And how to do it right-way...
Thanks
In general, unless you have a real, actual problem with performance and/or memory usage, define an Objective-C class. Having an Objective-C class will allow you to easily use it in Objective-C collections, property lists, memory management via autorelease pools, and introspection.
That being said, if you have a very simple set of attributes and functions and/or performance/memory are bootlenecks, feel free to use structures and global functions. They’re small and cheap. Apple’s frameworks make use of them — for instance, NSSize/CGSize
is a simple structure that holds two attributes, width and height, and there are a few functions that operate on them:
// 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);
…
There are other cases in Apple’s frameworks where struct
s are used instead of classes, e.g. NSPoint
and NSRect
.
If you have attributes that are pointers to dynamically allocated memory, you need to be careful with allocation, initialisation, and deallocation. In these cases, an Objective-C class would be more convenient.
An alternative is to use Objective-C++ and make it a C++ class/structure. For instance,
struct Vector3 {
float X;
float Y;
float Length() { return X + Y; }
};
精彩评论