【问题标题】:Java class to objective-C classJava 类到 Objective-C 类
【发布时间】:2023-03-13 08:36:01
【问题描述】:

我需要知道以下代码在 Objective-C 中的等效代码是什么

public MyClass(int x, int y) {
        xCoOrdinate = x;
        yCoOrdinate = y;
    }

    public int getXCoOrdinate() {
        return xCoOrdinate;
    }

    public int getYCoOrdinate() {
        return yCoOrdinate;
    }
    public MyClass func() {
        return new MyClass(xCoOrdinate - 1, yCoOrdinate);
    }

这是我尝试过的:

    -(id)initWithX:(int )X andY:(int)Y
{
    if(self = [super init])
    {
        self.xCoOrdinate = X;
        self.yCoOrdinate = Y;

    }
    return self;
}
-(MyClass *)func
{

    return [self initWithX:(self.xCoOrdinate -1)  andY:self.yCoOrdinate];
}

这是正确的方法吗?

【问题讨论】:

  • 您是否使用 ARC 进行编译,此代码是针对 iOS 还是 OS X?
  • @jlehr 在没有 ARC 的情况下编译并以 iOS 为目标

标签: java objective-c cocoa methods code-conversion


【解决方案1】:

没有。您需要返回该类的一个新实例:

-(MyClass *)func
{
    return [[[[self class] alloc] initWithX:(self.xCoOrdinate - 1)  andY:self.yCoOrdinate] autorelease];
}

请注意,我们使用[[self class alloc] 创建当前类的新实例MyClass。

【讨论】:

  • 应该自动释放新实例,因为根据 Cocoa 的内存管理约定,名为“func”的方法不会返回拥有的对象。
【解决方案2】:

一些更正:

public int getXCoOrdinate() {
    return xCoOrdinate;
}

会变成:

- (int)getXCoOrdinate
{
    return [self xCoOrdinate];
}

和

public MyClass func() {
    return new MyClass(xCoOrdinate - 1, yCoOrdinate);
}

会变成:

+ (MyClass*)func
{
     MyClass* newFunc = [[MyClass alloc] initWithX:0 Y:0];

     if (newFunc)
     {
     }
     return newFunc;
}

【讨论】:

  • getter 是不必要的,他将变量创建为属性,如他的语法所示。
  • @RichardJ.RossIII 我只是试图解释它应该如何以一般方式完成。当然,如果他使用@property,则可能不需要getter/setter...
  • Objective-C 中的约定是不要在 getter 前面加上“get”。你应该叫它xCoordinate
  • @JeremyP 好点。我当然知道。虽然我试图不混淆 OP(我只是决定坚持他命名函数的方式)。
猜你喜欢
  • 2012-02-13
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多