Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:处理静态变量_Objective C_Struct_Messages_Class Method_Ivar - Fatal编程技术网

Objective c 目标C:处理静态变量

Objective c 目标C:处理静态变量,objective-c,struct,messages,class-method,ivar,Objective C,Struct,Messages,Class Method,Ivar,根据下面的代码,太空船只有一个在程序中检查,看看它是否可以支付一个新的部分,如果是的话,建造它。发送payFor:消息时,IVAR应按如下方式处理,还是应按+voidDecrete:ShipObject*cost;,等方式处理每笔交易;,还是应该使用struct和structure算术 @ implementation Spaceship +(void) payFor: (ShipObject) *shipObject { totalEnergy -= [shipObject e

根据下面的代码,太空船只有一个在程序中检查,看看它是否可以支付一个新的部分,如果是的话,建造它。发送payFor:消息时,IVAR应按如下方式处理,还是应按+voidDecrete:ShipObject*cost;,等方式处理每笔交易;,还是应该使用struct和structure算术

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

谢谢你的见解

首先,由于这些方法是类方法,而不是实例方法,所以我假设变量不是ivar,而是某种类型的静态变量

如果允许使用部分而非全部付款方式付款,例如,仅使用能源和样品,而不使用信用证,那么您应该使用三种不同的方法。否则,您的payFor方法对于Objective C非常惯用。在Objective C类不再提供足够性能的罕见情况下,应该保留使用C struct


考虑将宇宙飞船变成一个单体,并使用IVAR:如果你决定在游戏中引入更多飞船,或者做一些更容易处理对象的事情,例如对象状态的外部化,这可能会变得很方便。

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

如果允许使用部分而非全部付款方式付款,例如,仅使用能源和样品,而不使用信用证,那么您应该使用三种不同的方法。否则,您的payFor方法对于Objective C非常惯用。在Objective C类不再提供足够性能的罕见情况下,应该保留使用C struct


考虑将宇宙飞船设置为单体,并使用ivar:如果您决定在游戏中引入更多飞船,或者对对象执行更容易的操作,例如对象状态的外部化,这可能会很方便。

显示您的ivar声明。显示您的ivar声明。是的,更新的问题不是实例变量!我在想,如果ShipObject只使用了2种支付形式,那么它实际上会使用3种,而未使用的一种支付形式则设置为0。是的,我想尽量远离底层C,因为性能不是问题。singleton和SharedManager是否过度使用?@user2000809考虑到现在在Objective C中创建一个singleton是多么简单,这也算不上过度使用。作为回报,你会得到你只通过对象得到的好东西。例如,如果您决定保存宇宙飞船的状态,则可以使用NSCoding,并以特定于框架的方式进行序列化。是的,更新的问题不是实例变量!我在想,如果ShipObject只使用了2种支付形式,那么它实际上会使用3种,而未使用的一种支付形式则设置为0。是的,我想尽量远离底层C,因为性能不是问题。singleton和SharedManager是否过度使用?@user2000809考虑到现在在Objective C中创建一个singleton是多么简单,这也算不上过度使用。作为回报,你会得到你只通过对象得到的好东西。例如,如果您决定保存宇宙飞船的状态,则可以使用NSCoding,并以特定于框架的方式进行序列化。