2

一部の Java コードを Objective-C に変換しようとしています。

Java で書かれた「bone」というクラスのコンストラクターのコードの一部を次に示します。

public class Bone {

public static double            RADS_TO_DEGS =
                                Quaternion.RADS_TO_DEGS;
public static double            DEGS_TO_RADS =
                                Quaternion.DEGS_TO_RADS;

public static int               LUPA_4CC =
                                FourCCUtil.fourCCInt("LUPA");
public static int               RUPA_4CC =
                                FourCCUtil.fourCCInt("RUPA");
public static int               LLRA_4CC =
                                FourCCUtil.fourCCInt("LLRA");
public static int               RLRA_4CC =
                                FourCCUtil.fourCCInt("RLRA");

protected float                 length;
protected Bone                  parent;
protected Bone[]                childBones;
protected int                   fourCCName;
protected int                   parentFourCCName;
protected float[]               translation;

Objective-C でこのコードを書き直そうとしているのは次のとおりです。

骨.h

@interface Bone : NSObject{

@property static double         RADS_TO_DEGS;
@property static double         DEGS_TO_RADS;

@property static int                LUPA_4CC;
@property static int                RUPA_4CC;
@property static int                LLRA_4CC;
@property static int                RLRA_4CC;


@protected {
    @property float length;
    @property Bone parent;
    @property Bone[] childBones ;
    @property int fourCCName;
    @property int parentFourCCName;
    @property float[] translation;

骨.m

@implementation VA_Bone

-(id)init{

    self=[super init];
    if(self){

        VA_4ccUtil       *FCC       = [[VA_4ccUtil alloc] init];
        VA_Bone          *Bone      = [[VA_Bone alloc] init];
        VA_TRTransform   *TRTform   = [[VA_TRTransform alloc] init];
        VA_TRUtil        *TRUtil    = [[VA_TRUtil alloc] init];
        VA_Quaternion    *Quat      = [[VA_Quaternion alloc] init]];           

       [Bone setDEGS_TO_RADS: [Quat DEGS_TO_RADS]];
       [Bone setRADS_TO_DEGS: [Quat RADS_TO_DEGS]];

       [Bone setLUPA_4CC: [TRUtil fourCCInt:"LUPA"]];
       [Bone setRUPA_4CC: [TRUtil fourCCInt:"RUPA"]];
       [Bone setLLRA_4CC: [TRUtil fourCCInt:"LLRA"]];
       [Bone setRLRA_4CC: [TRUtil fourCCInt:"RLRA"]];

        [self setParent:NULL];
        [self setFourCCName:0];
        [self setParentFourCCName:0];
        [self setTranslation:NULL];
        [self setLength:0];

    }
    return self;
}

私の質問は次のとおりです。

1) 静的メソッドを正しく宣言しましたか?

2) クラス タイプを割り当てることは可能ですか、それとも Bone[] の代わりに NSMutableArray などの配列を使用する方がよいですか?

現在、いくつかのJavaコードを目的のcに変換しているため、目的のcでクラスを構築する方法についてまだ頭を悩ませています。

敬具、サム

4

1 に答える 1

4

静的メソッドを正しく宣言しましたか?

いいえ。Objective C のようなものはありません。クラス メソッド@property staticとして宣言する必要があります。

+(double)RADS_TO_DEGS; // This is a getter

セッターが必要な場合は、もう 1 つのメソッドを記述します。

+(void)setRADS_TO_DEGS:(double)val; // This is a setter

クラス タイプを割り当てることは可能ですか、それとも Bone[] の代わりに NSMutableArray などの配列を使用する方がよいですか?

プレーンな C 配列は、所有権の問題のために問題があります。プロパティを使用すると、より適切なサービスが提供されNSArrayます。これにより、同じ柔軟性が得られ、クライアントに高速な列挙が提供され、Objective C に慣用的な方法でリソースのクリーンアップが処理されます。

于 2013-01-27T21:49:05.763 に答える