2

给定下面的代码,宇宙飞船(程序中只有一个)会检查它是否可以支付新零件的费用,然后“如果(是)”就建造它。发送消息时payFor:,应该像下面那样处理 iVar,还是应该像每个事务一样使用方法+(void)deduct: (ShipObject *) cost;,或者我应该使用struct和使用结构算术?

@ implementation Spaceship
+(void) payFor: (ShipObject) *shipObject
{
    totalEnergy     -= [shipObject energy];     
    totalCredits    -= [shipObject credits];
    totalSamples    -= [shipObject samples];
}

+(void) buildShipObject: (ShipObject) *shipObject
{
    if ([self canBuild: shipObject]) {
        [self payFor: shipObject];
...
}

感谢您的任何见解!

4

1 回答 1

4

首先,由于方法是类方法,而不是实例方法,我假设变量不是 ivars,而是某种静态变量。

如果允许使用某些而非全部支付方式(例如,仅使用能源和样品,而不是信用)进行支付,那么您应该使用三种不同的方法。否则,您的payFor方法对于 Objective C 来说是非常惯用的。使用 Cstruct应该保留用于 Objective C 类不再提供足够性能的罕见情况。

考虑将宇宙飞船设为单例,并使用 ivars:如果您决定在游戏中引入更多飞船,或者对对象做一些更容易完成的事情(例如对象状态的外部化),这可能会很方便。

于 2013-04-10T00:47:02.767 回答