通过Game Center发送字典而不是结构时有什么区别?

时间:2013-11-09 23:51:45

标签: ios objective-c ios7 game-center gamekit

我正在使用Game Center为我的iOS游戏实现多人游戏模式。

它几乎是一个回合制RPG(但它使用的是实时模型),因此我并不需要经常发送数据。

我注意到大多数示例都使用结构发送数据。一个属性是消息类型,另一个属性只是解释消息的额外参数。

我个人非常喜欢发送字典而不是结构,除了易于工作之外没有特别的理由(至少在我的具体情况下)。

我想知道通过游戏中心发送结构和字典之间的客观差异,所以我可以衡量它是否真的值得做另一个。

一些因素:

  • 这是一个回合制RPG。等待你的对手发送他们决定的消息。几乎没有动力,因此数据交换不是很频繁。如果有的话,我会说玩家通常需要5秒才能做出决定。
  • 我的所有数据都以可靠的模式发送。
  • 我的词典通常包含大约3-5个键,其值通常为NSStringNSNumber个实例。

1 个答案:

答案 0 :(得分:0)

字典比简单的结构使用更多的空间。 使用词典,您有很大的灵活性 - >只要字典中的所有对象都是可序列化的,您就可以在运行时创建字典并发送它。代码也很容易编写。 如果您需要执行诸如发送数组之类的操作,或者在编译时发送您不知道的多个对象,则发送字典是一个很好的选择。实际上,如果您知道在消息中使用的所有对象都是可序列化的,那么您只需要一种可用于所有字典的编码/解码方法。

示例:Convert nsdictionary to nsdata

结构通常占用较少的空间。 您需要在编译时定义结构 - 您需要知道计划发送的数据的结构。你不能动态地这样做。 如果需要发送多个数组,则需要事先知道大小,因为在运行时无法发送多个可变长度数组。

对于您的情况,如果它是“回合制”,如果这里或那里几秒钟不会产生太大差异,那么NSDictionary对您来说可能更方便。

如果您正在编写第一人称射击游戏或某种需要每秒发送30或60次数据的动作游戏,那么您可以使用最小的格式发送数据以避免延迟问题。

在理想的世界中,无论是基于回合还是fps,您都不希望发送超出必要数据的数据,因为您浪费带宽,而您的应用需要更长时间才能发送/接收消息。最佳方法是创建自己的格式,以最小化浪费的位数(例如:如果您知道您发送的数字永远不会大于10,那么您只使用4位来表示它)。但实际上,它可能使编码这种有效的编码/解码方法变得棘手。