2011-01-07 4 views
0

Objective-C(これまでは.NETと、主にANSI Cで作業していました)にはかなり新しくなっています。Objective-CとVector3の構造体

だから私は、次のようにintersstedています:.NETで 私が持っている:

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

しかし、どのようにObjective-Cでこれを行うために管理するの?

クラスを大量に使用しているため、Vector3表現のクラスを使用するのは本当にダムです。

私は唯一のアイデアは、Cのように、構造体を行う必要があり、その後、Length(struct Vector3 * vec)

などの静的メソッドを持つ静的クラスは、この良い方法、または地獄への道ですか?そして、それを右の方法を行う方法...一般的には

答えて

2

おかげで、あなたは、パフォーマンスおよび/またはメモリ使用量との本当の、実際の問題を抱えている場合を除き、Objective-Cのクラスを定義します。 Objective-Cクラスを使用すると、Objective-Cコレクション、プロパティリスト、自動解放プールによるメモリ管理、およびイントロスペクションで簡単に使用できます。

非常に単純な属性や関数、パフォーマンス/メモリがブートローンである場合は、構造体やグローバル関数を自由に使用してください。彼らは小さくて安い。

// 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のフレームワークどこで他のケースがあります:幅と高さ、例えば、NSSize/CGSize 2つの属性を保持しているシンプルな構造であり、そしてそれらを操作するいくつかの機能があります - Appleのフレームワークは、それらを活用しますクラスの代わりにstructが使用されます。 NSPointおよびNSRect

動的に割り当てられたメモリへのポインタである属性がある場合は、割り当て、初期化、および割り当て解除に注意する必要があります。これらの場合、Objective-Cクラスがより便利になります。

Objective-C++を使用して、C++クラス/構造にすることもできます。例えば、

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