Objective-C:使用静态变量

时间:2013-04-10 00:37:12

标签: objective-c struct messages class-method ivar

鉴于下面的代码,太空船(程序中只有一个)检查是否可以支付新零件,并且'if(so)'构建它。当发送payFor:消息时,是否应如下处理iVar,或者每个事务应该是+(void)deduct: (ShipObject *) cost;之类的方法,还是应该使用struct并使用结构算法?< / p>

@ 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];
...
}

感谢您的任何见解!

1 个答案:

答案 0 :(得分:4)

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

如果允许使用某些(而非所有)付款方式付款(例如,仅使用能源和样品,而不是积分),那么您应该使用三种不同的方法。否则,您的payFor方法与Objective C非常惯用。对于Objective C类不再提供足够性能的罕见情况,应保留使用C struct

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