web-dev-qa-db-fra.com

iOS5 Que signifie «Supprimer le message pour l'événement 0 en raison d'un trop grand nombre de messages non traités»?

Je fais des tests de performances de mon application et j'ai remarqué que cela prend trop de temps pour exécuter certaines intégrations. Après un certain temps, j'ai eu tout un tas de

Discarding message for event 0 because of too many unprocessed messages

dans la console xcode. Qu'est-ce que cela signifie précisément?

52
Alex Stone

Voici ce que Apple Support technique dit à ce sujet (après avoir payé 49 $ pour un incident de support technique développeur):

Ces messages proviennent du framework Core Location. La cause la plus probable de ces messages est qu'il n'y a pas de boucle d'exécution en cours d'exécution sur le thread sur lequel le CLLocationManager a été créé. (Cela implique que le CLLocationManager n'a pas été créé sur le thread principal.) Les messages qui sont rejetés sont des messages d'emplacement: l'événement 0 est un emplacement et l'événement 24 est une mise à jour du statut d'autorisation, par exemple. Étant donné que les messages sont supprimés, vous ne verrez pas les rappels de délégués appropriés appelés. Avez-vous mis en place une clôture géographique ou un autre rappel et ne le réparez pas assez rapidement? La limite de file d'attente semble être de 10 avant de commencer à vider les événements et à consigner ce message. Ces informations ne sont pas encore publiquement documentées. Je travaille avec l'équipe Core Location pour améliorer les messages signalés et voir si cela peut être mieux documenté.

97

Michael a raison, la raison en est que le gestionnaire d'emplacement ne peut s'exécuter que sur un thread qui a une boucle en cours d'exécution (thread principal par défaut), sinon les rappels envoyés par lui ne seront pas traités. Veuillez consulter l'avertissement suivant une fois que j'ai essayé d'initialiser le SDK Zoosh sur un thread d'arrière-plan:

AVIS, Un gestionnaire d'emplacement (0x11b5c9d0) a été créé sur une file d'attente de répartition s'exécutant sur un thread autre que le thread principal. Il est de la responsabilité du développeur de s'assurer qu'il existe une boucle d'exécution en cours d'exécution sur le thread sur lequel l'objet gestionnaire d'emplacement est alloué. En particulier, la création de gestionnaires d'emplacement dans des files d'attente de répartition arbitraires (non attachées à la file d'attente principale) n'est pas prise en charge et entraînera la non-réception de rappels.

C'est clair. Et la mise de l'initialisation dans le thread principal efface cet avertissement et aucun "Message de rejet pour l'événement 0 en raison d'un trop grand nombre de messages non traités" ne se produit.

1
Chengjiong