Souhaitez-il jeter plus de lumière si je disais que fetchHTML a été appelé dans un thread séparé? Je vois aussi plusieurs messages dans la console de débogage tels que:stringWithContentsOfURL fuite de mémoire
_NSAutoreleaseNoPool(): Object 0xd92860 de classe NSCFDictionary autoreleased sans piscine en place - juste une fuite
_NSAutoreleaseNoPool(): Object 0xd92800 de classe NSCFString autoreleased avec Je n'ai pas de piscine en place - juste une fuite
Je suis nouveau dans le développement d'applications iPhone, Objective-C mais pas nouveau en programmation ou en C/C++. J'utilise l'outil de performance des fuites et il montre beaucoup de fuites. Ceci est une fuite de 10,5 kb et il se produit sur la ligne:
NSString * xml = [NSString stringWithContentsOfURL:urlobj];
La trace de la pile sur ce ci-dessous est la suivante:
stringWithContentsOfURL
initWithContentsOfURL
initWithDataOfEncoding
...
Est-ce que quelqu'un a une idée pourquoi cela doit se produire. Je suis sous l'impression que je reçois un objet autorelease ici et je peux le retourner à l'appelant sans appeler retenez. Je n'utilise pas l'objet xml pour stocker dans une variable d'instance, juste pour le traitement.
Voici le code de fonction:
- (NSString *) fetchHTML: (NSString*) url{
@try
{
NSURL* urlobj = [NSURL URLWithString:url];
NSString * xml = [NSString stringWithContentsOfURL:urlobj];
return xml;
}
@catch(NSException *ex){
NSLog(@"Error fetchingHTML");
return nil;
}
return nil;
}
'Cela donnerait-il plus de lumière si je disais que fetchHTML était appelé dans un thread séparé?' Oui. Vous avez suivi la documentation et créé un pool autorelease pour le thread, non? De préférence, l'une des premières choses à faire, sinon la première, dans le point d'entrée méthode/fonction pour le thread engendré. – johne