java - Objective C 中的构造函数、静态方法和类变量

标签 java iphone ios objective-c

只是尝试将一些 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) 是否可以分配类类型,或者使用 NSMutableArray 等数组代替 Bone[] 更好?

由于我目前正在将一些 Java 代码转换为 Objective C,所以我仍在尝试了解如何在 Objective-C 中构造类。

亲切的问候, 山姆

最佳答案

Have I declared the static methods correctly?

没有。 Objective C 中没有 @property static 这样的东西。您需要将它们声明为类方法:

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

如果您需要 setter,请再编写一个方法:

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

Is it possible to assign class types or is it better to use an array such as NSMutableArray instead of Bone[]?

由于所有权问题,普通 C 数组存在问题。 NSArray 属性将为您提供更好的服务:它将为您提供相同的灵活性,为您的客户提供快速枚举,并以 Objective C 惯用的方式处理资源清理。

关于java - Objective C 中的构造函数、静态方法和类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14552612/

相关文章:

java - R.java 文件每次都会自动删除

java - 测试从数据库插入、更新和删除的类

java - IntelliJ 似乎使用 javac 而不是 groovyc 来处理 groovy 文件?

iPhone CFSocket 传入/传出消息

iphone - 释放 UIViewController

java - 让 Jackson 从 Spring Controller 返回 JSON 对象

iphone - 从变换后的 ImageView 绘制图像

iOS 相机覆盖捕获图像

iphone - 无法在单元测试中设置 NSMutableDictionary 中的值

ios - NSRequiresCertificateTransparency = YES 使 https 在 iOS 9 模拟器中失败