Ios 通过游戏中心发送字典而不是结构时有什么区别?

Ios 通过游戏中心发送字典而不是结构时有什么区别?,ios,objective-c,ios7,game-center,gamekit,Ios,Objective C,Ios7,Game Center,Gamekit,我正在使用游戏中心为我的iOS游戏实现多人模式 这几乎是一个基于回合的RPG,但它使用实时模型,所以我不需要经常发送数据 我注意到大多数示例都使用结构发送数据。一个属性是消息种类,而其他属性只是解释消息的额外参数 一、 就个人而言,我喜欢发送字典而不是结构,至少在我的具体情况下,除了工作简单之外,没有其他特殊原因 我想知道通过Game Center发送结构和字典之间的客观区别,这样我就可以衡量是否值得一个而不是另一个 一些因素: 这是一个基于回合的RPG。你等待你的对手发出一个信息,说明他们的决

我正在使用游戏中心为我的iOS游戏实现多人模式

这几乎是一个基于回合的RPG,但它使用实时模型,所以我不需要经常发送数据

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

一、 就个人而言,我喜欢发送字典而不是结构,至少在我的具体情况下,除了工作简单之外,没有其他特殊原因

我想知道通过Game Center发送结构和字典之间的客观区别,这样我就可以衡量是否值得一个而不是另一个

一些因素:

这是一个基于回合的RPG。你等待你的对手发出一个信息,说明他们的决定。动态性很小,因此数据交换不太频繁。如果有什么不同的话,我会说一个球员通常需要5秒钟来做出决定。 我所有的数据都以可靠模式发送。 我的字典通常包含大约3-5个键,其中的值通常是NSString或NSNumber实例。
字典比简单的结构使用更多的空间。 使用字典,您有很大的灵活性->您可以在运行时创建字典并发送它,只要字典中的所有对象都是可序列化的。代码也很容易编写。 如果您需要执行诸如发送数组或发送多个在编译时不知道的对象之类的操作,那么发送字典是一个很好的选择。事实上,如果您知道消息中使用的所有对象都是可序列化的,那么您只需要一个可用于所有字典的编码/解码方法

例如:

结构通常使用更少的空间。 您需要在编译时定义结构—您需要知道计划发送的数据的结构。您不能动态地执行此操作。 如果需要发送多个数组,则需要事先知道大小,因为不能在运行时发送多个可变长度数组

对于你的情况,如果它是基于回合的,并且如果在这里或那里几秒钟不会产生太大的影响,那么NSDictionary可能对你更方便

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

在理想情况下,无论是基于回合的,还是fps,你都不想发送超出需要的数据,因为你在浪费带宽,你的应用程序发送/接收消息的时间也会更长。最佳的方法是创建自己的格式,从而最大限度地减少浪费的比特数。例如:如果您知道您发送的数字永远不会大于10,那么您只使用4个比特来表示它。但在现实中,这可能会使编码成为一种复杂的高效编码/解码方法