2011-07-08 1 views
1

J'utilise NSOperationQueue pour gérer une phase d'une application iOS qui est assez longue donc je voudrais la gérer de manière asynchrone. A l'intérieur de cette phase, j'alloue de grands tableaux en C en utilisant directement les fonctions calloc. Avec grand, je veux dire un tableau bidimensionnel de 1024x256 flottants et des choses similaires. Si tout réside sur le thread principal que l'application se bloque en cours de calcul mais que tout va bien, si, à la place, je déplace la partie lourde à NSInvocationOperation alors j'ai eu beaucoup de résultats étranges, avec le débogueur parfois je reçois un message étrange dans la console indiquantEst-ce que NSThread a les mêmes privilèges de mémoire que le thread principal?

Pas de mémoire disponible pour programmer maintenant: dangereux pour appeler malloc

donc je me demandais si les discussions gérés par une file d'attente d'opération ont des restrictions différentes par rapport à thread principal, et en cas ce est préférable de faire pour contourner ce problème.

Répondre

1

Il n'y a pas de restrictions que je connaisse .. Cependant, vous pouvez être en train de toucher la limite de la RAM disponible. Comme iOS ne fait pas de mémoire virtuelle, lorsque la mémoire devient faible, il envoie un avertissement à d'autres applications pour libérer de la RAM. Cela peut être la source de votre problème.

Utilisez des instruments pour déterminer la quantité de RAM utilisée. Si c'est plus de 20 Mo environ, vous risquez probablement d'être interrompu en raison d'une utilisation excessive de la mémoire de toute façon.

Questions connexes