J'ai un problème de compatibilité de mon application avec une version IOS5 B7 et GM.
Le problème se produit dans les prochaines lignes de code: P>
do { [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; } while (!done);
4 Réponses :
Ceci ressemble à dans votre code, essayez-le à Crash dès que possible forts>: P> #include <pthread.h>
- (void)myFunction
{
NSLog(@"Thread (%d)",
pthread_mach_thread_np(pthread_self()));
}
Oui, il fonctionne dans un fil séparé. Et non, il n'y a pas de problèmes de mémoire à cause de tout ce qui fonctionne correctement dans iOS4 et Apple ne publiera pas d'échantillon avec des erreurs de mémoire.
J'ai eu un mauvais code d'échantillon d'Apple ou peut-être que c'est comme ça que je l'ai utilisé :) Problèmes de threading potentiels: Toutes les utilisateurs doivent être en maintenance. Toutes les trucs d'ALASSET au moins dans le même fil, peut-être même en main (pas sûr). Sinon, partager des données entre les threads peut-être avec NSLOCK ou @Synchronized
Tout fonctionne bien sur iOS4 ... et il n'y a pas d'interface utilisateur dans ce fil.
Les outils iOS4 sont moins stricts, donc cela ne signifie pas vraiment quoi que ce soit. Maintenant, l'application de débogage qui fonctionne bien sur iOS5GM mais ne compile même pas à compiler avec iOS4 SDK: (vous avez déjà "analysé" et corrigé tous les problèmes potentiels?
UI dans des threads non principaux: Pourriez-vous avoir du code, qui veut afficher l'interface utilisateur dans certains cas par ex. NsurlConnection, AlstretsLibrary, Nstimer? Délégué Pointeur Code d'exécution dans le mauvais fil, certains soi-même devraient être __blockez-moi? Eh bien, suppose que je manque d'idées avec un filetage.
Merci de votre aide. J'ai essayé de décrire le problème dans ma réponse. J'ai voté votre réponse, merci. Si vous aurez des idées sur la question, je serais heureux de les entendre.
Regard sur votre code: Où est-ce que Aussi, vous pouvez vérifier la valeur de retour
Avec fait code> variable tout va bien. Runmode: fonctionne fonctionne. J'ai trouvé le problème et je répondra bientôt. Vérifiez-le, il y a aussi quelques questions.
4 heures passées et j'ai trouvé le problème. Je vais décrire comment j'ai résolu le problème dans Le problème était dans donc dans comme vous voyez des lignes: p> Donc, exactement que les lignes provoquent l'exception. Si je les commente, tout fonctionne bien. P> mais j'ai décidé non seulement de commenter ces lignes mais également remplacer Tout fonctionne bien. Le seul problème que je n'ai pas résolu est: p> Donc, si quelqu'un a des idées à propos de ce problème peut poster une autre réponse et essayer d'expliquer plus correctement le bug réparer. Je serai heureux d'accepter cette réponse. P> Merci. P> P> xmlperformance échantillon code>.
nsautoreleeepool code>. Il y a
@property (nonatomic, assigné) nsautoreleeepool * téléchargdalandparsepool; code>. Lorsque l'application commence à télécharger
top300 applications payées RSS code> Nouveau thread est créée à l'aide de
[NSTHREAD SetachNeadSelector: @Selector (DownloadAnse :) TOTArget: auto withl]; code>. Donc, dans ce fil, nous devrions garder la piscine de l'autorelease locale. Il se fait à la prochaine intention: p>
téléchargdalandparse: code> tout va bien. Maintenant, regardons dans une méthode appelée lorsqu'un élément de RSS est analysé: p>
nsaToreleeePool code> dans
- (NSURL *) URL Code> avec
@Autorelease CODE> Le bloc tel qu'il est dit qu'il est plus efficace: p>
Le code d'origine utilisait un nsautoreleePool commun et essayant de le réinitialiser, lorsqu'il est estimé qu'il est "complet". J'aurais remplacé ce code avec un simple drain [Self.DowntHownloadandandandsePool], qui devrait faire la même chose, mais être plus sûr. Vous réparez était d'ajouter une deuxième piscine à l'intérieur du premier. Devrait être ok et définitivement plus sûr.
Merci, Jom, pour votre réponse.
Juste ma petite contribution. P>
Comme j'ai le même problème, j'ai découvert que dans iOS5, vous n'avez pas besoin d'avoir votre propre NsaTorelEeSePool dans un fil (utilisé par PresqueSelectoronmainthread). P>
Puis, dans votre code (un analyseur XML-idem que moi), je pense que vous devez séparer le code de iOS4 et iOS5. P>
avec iOS4, vous avez besoin de NsAutoreleeePool, mais pas avec iOS5. P>