2012-04-06 20 views
2

我需要知道什麼是以下中的代碼的等效代碼的Objective-CJava類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]; 
} 

是這是一個正確的方式?

+0

您正在編譯是否使用ARC,並且此代碼是針對iOS還是OS X? – jlehr 2012-04-06 12:53:19

+0

@jlehr編譯沒有ARC和目標iOS – 2012-04-06 13:00:17

回答

4

號您需要返回類的新實例:我們使用[[self class alloc]

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

通知創建當前類,MyClass的新實例。

+0

新實例應該自動釋放,因爲根據Cocoa的內存管理約定,名爲「func」的方法不會返回擁有的對象。 – 2012-04-07 06:46:35

+0

@KenThomases true,fixed。 – 2012-04-07 14:19:51

1

一些更正:

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; 
} 
+0

getter是不必要的,他創建變量作爲屬性,如他的語法所示。 – 2012-04-06 13:09:13

+0

@ RichardJ.RossIII我只是試圖解釋它應該如何以一般的方式完成。當然,如果他使用'@ property'沒有干將/可能需要制定者... – 2012-04-06 13:16:11

+0

在Objective-C的約定是不添加前綴「搞定」干將。你應該叫它'xCoordinate' – JeremyP 2012-04-06 13:50:36