2013-11-09 4 views
1

Game Center를 사용하여 iOS 게임용 멀티 플레이어 모드를 구현 중입니다.Game Center를 통해 구조체가 아닌 사전을 보낼 때 어떤 차이가 있습니까?

꽤 많은 턴 기반 RPG (그러나 실시간 모델을 사용합니다)이므로 너무 자주 데이터를 보낼 필요가 없습니다.

나는 대부분의 예제가 구조체를 사용하여 데이터를 보냈다는 것을 알았다. 하나의 속성은 메시지 종류이며 다른 속성은 메시지를 해석하기위한 추가 매개 변수입니다.

나는 개인적으로, 적어도 개인적인 측면에서 작업의 용이함 이외의 특별한 이유없이 구조체보다는 사전을 보내는 것을 즐긴다.

구조체와 사전을 Game Center를 통해 전송하는 것의 객관적인 차이점을 알고 싶습니다. 따라서 실제로 다른 것을 수행 할 가치가 있는지 여부를 측정 할 수 있습니다.

일부 요인 :

  • 그것은 턴 기반 RPG입니다. 라이벌이 결정을 내릴 때까지 기다릴 것입니다. 역 동성이 거의 없으므로 데이터 교환이 자주 이루어지지 않습니다. 무엇이라도 나는 일반적으로 플레이어가 결정을 내리는 데 5 초 정도 걸릴 것이라고 말하고 싶습니다.
  • 내 모든 데이터는 신뢰할 수있는 모드로 보내집니다.
  • 내 사전에는 일반적으로 약 3-5 개의 키가 있습니다. 여기서 값은 보통 NSString 또는 NSNumber 인스턴스입니다.

답변

0

사전은 간단한 구조체보다 훨씬 많은 공간을 사용합니다. 사전을 사용하면 많은 유연성을 얻을 수 있습니다. - 사전에있는 모든 객체가 직렬화 될 수있는 한 런타임에 사전을 만들어 보낼 수 있습니다. 이 코드는 작성하기도 매우 쉽습니다. 사전 전송은 배열 전송과 같은 작업을 수행하거나 컴파일시 인식하지 못하는 여러 객체를 보내야하는 경우에 유용한 옵션입니다. 실제로 메시지에서 사용하는 모든 객체가 직렬화 가능하다는 것을 알고 있다면 모든 사전에 사용할 수있는 인코딩/디코딩 메소드가 하나만 있으면됩니다.

예 : Convert nsdictionary to nsdata

구조체는 일반적으로 적은 공간을 사용합니다. 컴파일 할 때 struct를 정의해야합니다. 보내려는 데이터의 구조를 알아야합니다. 이 작업은 동적으로 수행 할 수 없습니다. 여러 배열을 보내야하는 경우 런타임에 여러 변수 길이 배열을 보낼 수 없기 때문에 미리 크기를 알아야합니다.

상황에 따라 "턴 기반"이고 몇 초간 차이가 나지 않으면 NSDictionary가 더 편리 할 수 ​​있습니다.

1 인칭 슈팅 게임이나 초당 30 ~ 60 번 데이터를 보내야하는 일종의 액션 게임을 쓰고 있다면 가능한 한 가장 작은 형식을 사용하여 데이터를 보내면 대기 시간 문제를 피할 수 있습니다.

이상적인 세계라면, 대역폭을 낭비하고, 앱에서 메시지를 보내고받을 때 시간이 오래 걸리기 때문에 회전 기반인지 또는 fps인지에 관계없이 필요한 것보다 많은 데이터를 보내지 않을 것입니다. .가장 좋은 방법은 낭비되는 비트 수를 최소화하는 형식을 직접 만드는 것입니다 (예 : 보내는 숫자가 10보다 크지 않다는 것을 알고 4 비트 만 사용하면 표현할 수 있음). 그러나 실제로는 효율적인 인코딩/디코딩 방법을 까다로워지게 만들 수 있습니다.