Le pool autorelease est assez bête. Il ne "sait" pas qu'une variable est utilisée. Il appelle simplement release
sur chaque objet autoreleased. Cela se produit généralement à la fin de chaque itération de la boucle d'événement.
Si le pool de libération automatique est drainé avant que votre deuxième thread ait une chance de le conserver, il sera libéré. Au lieu de cela, il est généralement une bonne idée de conserver tout ce qui sera utilisé dans un autre thread avant à partir du thread. Vous n'avez aucun moyen de savoir quand le thread s'exécutera, il est donc préférable de supposer qu'il ne fonctionnera pas tant que le pool d'autorelease ne sera pas épuisé.
En d'autres termes, faire quelque chose comme ceci:
NSDictionary *dictionary = // Get the autoreleased dictionary... somehow
[NSThread detachNewThreadSelector:@selector(myThread:) toTarget:self withObject:[dictionary retain]];
Gardez à l'esprit votre fil possède maintenant dictionary
et est responsable d'appeler release
sur avant les sorties de fil, ou bien votre application fuite de mémoire.